簡體   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