繁体   English   中英

如果GET参数带有斜杠字符,为什么Ubuntu上的Python CGIHTTPServer返回我的脚本?

[英]Why does Python CGIHTTPServer on Ubuntu return my script if GET parameter has a slash character?

我正在尝试使用CGIHTTPServer运行一些基本的CGI。 我想传递一个带有特殊字符的参数(特别是URL,但是我认为这并不重要)。 我的设置适用于POST,但不适用于GET。 GET返回我的CGI脚本的内容。 我究竟做错了什么?

我在使用Python 2.7.3的Ubuntu 12.04上遇到此问题。 在Windows或Raspbian上运行相同的代码也可以。

这是我的例子。 我的HTTP服务器在这里,作为server.py:

#!/usr/bin/python

import BaseHTTPServer
import CGIHTTPServer

PORT = 8888

server = BaseHTTPServer.HTTPServer
Handler = CGIHTTPServer.CGIHTTPRequestHandler

httpd = server(("", PORT), Handler)
httpd.serve_forever()

我的网页testcgi.html如下所示:

<html>
<body>
<form method="get" action="/cgi-bin/testcgi.py">
<textarea name="comments" cols="20" rows="2">
Type message to GET here...
</textarea>
<br/>
<input type="submit" value="Test CGI GET">
</form>
<form method="post" action="/cgi-bin/testcgi.py">
<textarea name="comments" cols="20" rows="2">
Type message to POST here...
</textarea>
<br/>
<input type="submit" value="Test CGI POST">
</form>
</body>
</html>

...并且我的cgi脚本是testcgi.py,不确定是否很重要,但是这里是:

#!/usr/bin/python
#testcgi.py

import cgi

form = cgi.FieldStorage()

val1 = form.getvalue('comments')

print """
<html>
The form input is below...<br/>
</html>"""
print val1

我得到的输出(在Ubuntu上运行server.py)如下。 GET或POST输入“ Hello Goodbye”:

The form input is below...
Hello Goodbye 

输入“ Hello / Goodbye”的POST:

The form input is below...
Hello/Goodbye 

输入为“ Hello / Goodbye”的GET返回上述文件testcgi.py的内容。

据我所知,其他特殊字符(\\:%&等等)都可以正常工作。

您已重新发现所运行的旧Python版本的安全问题。 参见问题#21766 ; Python 2.7.6和更高版本包含此修复程序。

CGIHTTPServer.CGIHTTPRequestHandler.is_cgi()方法是否为引用的CGI脚本之前,不会对URL路径进行URL解码。

该错误报告包含一个变通办法,但是请注意,自2.7.3版本发布以来,该模块已在报告此安全问题之前之后修复了多个相关的错误。 您可能只想从Python商业库中获取最新版本 自2013年4月9日标记2.7.3以来,您还需要进行其他修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM