我正在尝试用c#编写一个快速的cgi应用程序.我需要到stdout流并写一些二进制数据.我唯一能找到的就是Console.Write,它接受文本.我也试过了
Process.GetCurrentProcess().StandardOutput.BaseStream.Write
Run Code Online (Sandbox Code Playgroud)
这也不起作用.这甚至可能吗?
我已经读过你的网络服务器出了问题,这可能导致在网络浏览器中将PHP脚本显示为纯文本文件; 因此,我将大多数PHP脚本移动到Web根目录之外的目录中.现在我一直想知道我的cgi-bin中的CGI脚本是否会发生同样的情况.
我主要关心的是一个包含MySQL数据库用户名和密码的脚本.如果这是一个可能的安全漏洞(至少就数据库内容而言),是否有办法将敏感数据放在不同的位置并从那里获取(如将其保存在不同目录的文件中并阅读它来自那个文件,例如)?我的脚本是用Perl btw编写的.
我目前正在我的大学注册一个Web应用程序课程,我们正在学习cgi脚本.我很难学习如何实现我的CGI脚本.当我点击我的链接时会弹出一个窗口,要求我下载helloworld.cgi文件而不是重定向.
HTML:
<html>
<body>
<a href="/user/local/apache2/cgi-bin/helloworld.cgi">click me</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
C++:
#include <iostream>
using namespace std;
int main(){
cout << "Content-type: text/html" << endl;
cout << "<html>" << endl;
cout << " <body>" << endl;
cout << " Hello World!" << endl;
cout << " </body>" << endl;
cout << "</html>" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
CGI脚本存储在 /user/local/apache2/cgi-bin/helloworld.cgi
当我尝试这个时:
while (my $cgi = new CGI::Fast) {
...
my $session = CGI::Session->new(undef, $cgi);
...
}
Run Code Online (Sandbox Code Playgroud)
我发现不同的客户正在进行相同的会话!什么会导致这个奇怪的会话共享?
编辑:我无法可靠地重现这一点,但在我的测试中,我看到过从浏览器中删除会话cookie,刷新页面以及(使用Firebug的Net窗格)看到我没有发送cookie的情况.请求,但在响应中使用旧会话ID 获取Set-Cookie !由于使用FastCGI,可能会在内存中出现问题?
(注意:我从这个问题的早期版本中删除了第二段代码,因为我不再确定它是否相关)
编辑:这http://osdir.com/ml/web.fastcgi.devel/2004-02/msg00007.html似乎描述了我所看到的行为
编辑: 如上面的osdir.com帖子所述,FCGI.pm包含以下代码:
for (keys %FCGI::ENV) {
$ENV{$_} = $FCGI::ENV{$_} unless exists $ENV{$_};
}
Run Code Online (Sandbox Code Playgroud)
这看起来很明显是我眼中的缺陷.只要当前请求不为给定变量提供值,它就会从环境变量的持久副本复制到脚本可见的环境副本中.因此,如果请求没有cookie,那么它将找不到定义的HTTP_COOKIE,因此它将为脚本提供发送它们的最后一个请求的cookie,这意味着其他会话!我不明白这段代码怎么可能是正确的,这是一个非常高度使用的模块!
我有一个C++程序充当CGI脚本,我目前正在使用Cgicc为我做一些解析和格式化(虽然它可能会在某些时候被替换).在构建我的响应时,我会使用cgicc::HttpResponseHeader,这将创建类似的东西
HTTP/1.1 302 Found
Location: www.bla.com
Run Code Online (Sandbox Code Playgroud)
这看起来很标准.然而,Web服务器对此感到窒息,给了我一个
<...> malformed header from script. Bad header=HTTP/1.1 302 Found: script.cgi
Run Code Online (Sandbox Code Playgroud)
我发现了如何解决这个问题:
HTTP/...行Status: 302 Found 事实上,这正是这样cgicc::HttpRedirectHeader做的.我现在有两个问题:
HTTP/1.1 302 Found不标准吗?cgicc::HttpResponseHeader这样做?如果是,为什么我的网络服务器会窒息?注意我不是在寻找解决这个问题的方法,我知道如何做到这一点.我只想了解最新情况.
干杯Ole
我必须在具有CGI-PHP的环境中运行我的CakePHP 2.1应用程序,并且无法声明apache别名.我想用mod_rewrite将请求重定向到子域到CakePHP,但这没有用.
当前设置
~/user/public_html~/user/public_html/cakephp/dev.mydomain.tld我到现在所拥有的是(所有路径相对于webroot):
~/user/public_html/.htaccess
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC]
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{DOCUMENT_ROOT}/cakephp/app/webroot%{REQUEST_URI}/ -d
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R,L]
RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC]
RewriteRule ^(.*)$ /cakephp/app/webroot/$1 [L]
Run Code Online (Sandbox Code Playgroud)~/user/public_html/cakephp/app/webroot/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)问题
请求以某种方式未正确路由(应用程序在我的开发环境中运行时没有问题,PHP作为模块和/cakephp/app/webroot/级别的虚拟主机).当我请求主页时,dev.mydomain.tld我只得到一个错误,Cake告诉我,CakephpController丢失了.
调试信息
$_SERVER调试的有趣部分作为第一行/cakephp/app/webroot/index.php
[REDIRECT_REDIRECT_REDIRECT_STATUS] => 200
[REDIRECT_REDIRECT_STATUS] => 200
[REDIRECT_HANDLER] => php-script
[REDIRECT_STATUS] => On …Run Code Online (Sandbox Code Playgroud)需要一些可以从服务器机器下载文件的cgi-perl脚本.EX:点击下载链接,它将打开一个"另存为"窗口,允许我将文件保存在本地计算机上.
我使用CGI创建了一个网页,使用这个我将上传文件到服务器并运行perl脚本将其转换为其他格式(直到这里我完成了).现在我需要将此文件恢复(下载回)到系统.
#!/usr/bin/perl
#print "Content-type: text/html\n\n";
my $filepath='/upload/testing.pm';
print "Content-Type: text/html\n\n";
open("DOWNLOADFILE", "<".$filePath);
while($fileContents = <DOWNLOADFILE>) {
print $fileContents;
}
print "Content-Type: text\n";
print "Content-Disposition: attachment; filename='testing.pm'\n";
print "Content-Description: File to download\n\n";
close DOWNLOADFILE;
Run Code Online (Sandbox Code Playgroud)
将文件从我的机器(客户端)上传到服务器机器,在那里我有一个perl脚本,它将文件转换为另一种格式,并将新转换的文件保存到目录ex:/ upload->直到这里我完成了脚本编写.
现在我需要使用浏览器将此文件下载回客户端计算机.在这种情况下,我试图将testing.pm文件下载回客户端计算机.
我是Python(和网络抓取)的新手.让我问你一个问题.
许多网站实际上并未在Firefox或其他浏览器中报告其特定URL.例如,社会安全管理员显示具有等级的流行婴儿名字(自1880年以来),但当我将年份从1880年改为1881年时,网址不会改变.它是不断的,
http://www.ssa.gov/cgi-bin/popularnames.cgi
因为我不知道具体的URL,所以我无法使用urllib下载网页.
在此页面源中,它包括:
<input type="text" name="year" id="yob" size="4" value="1880">
所以,假设我可以控制这个"年"值(比如"1881"或"1991"),我可以解决这个问题.我对吗?我还是不知道怎么做.
有人可以告诉我解决方案吗?
如果您了解一些可能有助于我学习的网站,请告知我们.
谢谢!
我有一个Perl CGI应用程序,有时超时,导致它被Apache杀死,并将504 Gateway Time-out错误发送到浏览器.我试图使用NYTProf来描述这个应用程序,但我无法读取配置文件数据:
$ nytprofhtml -f www/cgi-local/nytprof.out
Reading www/cgi-local/nytprof.out
Profile data incomplete, inflate error -5 ((null)) at end of input file, perhaps the process didn't exit cleanly or the file has been truncated (refer to TROUBLESHOOTING in the documentation)
Run Code Online (Sandbox Code Playgroud)
我正在使用sigexit=1NYTProf选项.这是重现问题的最小CGI脚本:
#!/usr/bin/perl -d:NYTProf
sleep 1 while 1;
Run Code Online (Sandbox Code Playgroud) 我有一个冻结的wxpython应用程序的用户获取附加的屏幕截图.
错误消息是"Windows错误:提供程序DLL无法正确初始化"
从暂停的视频中截取的屏幕截图是我从他们那里得到此错误消息的唯一方法,因为整个事情立即消失(包括创建此DOS窗口以捕获stderr,此消息出现在哪里).IE python在它真正开始之前就已经死了.
回溯指向我在controller.py第14行的代码.
这条线是
import cgi
出于某种原因,似乎cgi在导入期间调用随机(为什么会这样?)并且出于某种原因,由于某些DLL原因,这是失败的.
有线索吗?
注1:此应用程序适用于数百个其他Windows和Mac用户.所以就好像我不提供某些不仅仅是因为这个用户的机器而出于某种原因的东西.
注2:使用bbfreeze创建可执行文件,使用以下配置:
f = Freezer(distdir = distdir,
includes = ['wx.lib.pubsub.core.kwargs.*',
'wx.lib.pubsub.core.*',
'dbhash',
'platform']
)
Run Code Online (Sandbox Code Playgroud)
我不确定我还会在这里放什么.'CGI'?'随机'?
