2011-06-15 88 views
3

我有這樣一個問題,禁止:
403 Forbidden on PHP page called with url encoded in a $_GET parameter403 GET變量傳遞URL時

我收到「403禁止」錯誤 當我通過一個URL作爲這樣

http://script/test.php?url=https://stackoverflow.com/questions/ask 
一個GET變量

但這沒關係。

http://script/test.php?url=stackoverflow.com/questions/ask 

即使我URLEncode的鏈接它仍然給了我403

阿帕奇在mod_fcgid/2.3.6 mod_auth_passthrough/2.1 mod_bwlimited/1.4的FrontPage/5.0.2.2635服務器---- - 港口80

而且我不認爲這個服務器的mod_security啓用,因爲當我在.htaccess中加入SecFilterEngine Off我得到「500內部服務器錯誤」。

代碼片段:

$URL = mysql_real_escape_string($_GET['url']); 
mysql_query("INSERT INTO `url` ..."); 

所以,問題是,我可以解決這個問題,而不編輯httpd.conf文件,因爲我沒有root權限。 謝謝

+1

從test.php文件顯示一些代碼 – 2011-06-15 07:02:06

+0

我添加了它的先生,但我懷疑它是相關的,我試着用另一個文件它做了同樣的。 – 0xAli 2011-06-15 07:11:01

回答

5

你有訪問Apache錯誤日誌本身嗎?如果這是一個cPanel系統並且您有shell訪問權限,請嘗試查看/ usr/local/apache/logs/error_log日誌 - mod_security錯誤將出現在那裏。否則,你可以看看你的控制面板,看看它是否收到任何錯誤消息。

即使安裝了mod_security,如果關鍵字不被允許,仍然可以在將SecFilterEngine放入.htaccess後發生500錯誤。

我建議您聯繫您的虛擬主機以確定mod_security是否是原因。如果是這樣,你可以讓他們創建一個例外。 (我爲一個虛擬主機公司工作,我們幾乎總是很樂意爲合理的應用程序提供mod_security例外)

如果是由mod_security引起的,並且您的虛擬主機不會創建異常,那麼您需要更改託管公司或找到不同的方式來通過網址(base64編碼可能會爲你工作)

+0

非常感謝。 base64_encode()解決了它。 – RY35 2016-04-25 11:31:08

3

對我來說,解決這個問題是讓我的主機(hostgator)在我的網站上爲mod_security創建一個例外。 mod_security用於將某些類型的操作列入黑名單,並且看起來$ _GET請求包含url(http://www.etc)是一個,無論出於何種原因。正如lunixboch所說,大多數主機都會很樂意爲你排序。