2012-05-30 92 views
0

我正在開發一個小型應用程序,管理員可以在後端插入批量折扣優惠券代碼。在前端,網站訪問者可以逐一獲取這些代碼。要在後臺插入代金券代碼,我爲管理員提供了一個Textarea,他可以一次插入所有代碼。一切工作正常,直到我有一個唯一的代金券代碼「XXXXXX-XXX-XXX-wGeT」

我有一個簡單的HTML表單,它使用POST方法提交。在提交此憑證代碼時,瀏覽器會在響應中向我發送「501-未實現的方法」錯誤。問題出在代碼中的「wGet」關鍵字。我知道wget是一個linux命令,但是在這裏我將它作爲POST中的文本發送。服務器只是發送給我501錯誤。我搜索了很多,但沒有任何運氣。表單提交前,我如何轉義這個「wGeT」關鍵字?

編輯:

<?php 
if($_REQUEST){ 
    echo '<pre>'; 
    print_r($_REQUEST); 
    echo '</pre>'; 
} 
?> 
<html> 
    <head> 
     <title>Wget Demo</title> 
    </head> 
    <body> 
     <form name="frmCodes" method="POST"> 
      <textarea name="voucher_codes"></textarea> 
      <input type="submit" name="btnSubmit"/> 
     </form> 
    </body> 
</html> 
+3

它是純文本。它不需要轉義。你需要找出是什麼導致了錯誤(這可能是一些偏執的安全過濾器),並修復它,而不是試圖解決它。 – Quentin

+0

你可以展示一些更多的代碼,並解釋你所在的服務器 - 這聽起來不太像聽起來那麼簡單,我懷疑wget的事情只是一個巧合。最後用'wTeG'和'less'來嘗試它,以驗證它是否只有wget。 –

+2

可能是或可能不是mod_security錯誤。 – mario

回答

6

我認爲馬里奧的評論是正確的,它可能是mod_security的。

默認行爲將被掃描POST數據(參見/etc/httpd/conf/modsecurity.conf)

SecFilterScanPOST On 

與wget的通過用#前述它阻斷

# WEB-ATTACKS wget command attempt 
SecFilter "wget\x20" 

評論出這個所以SecFilter (或將SecFilterScanPOST設置爲Off)並重新啓動apache以查看它是否解決它。

或使用.htaccess文件在相應的目錄包含:

<IfModule mod_security.c> 
# Turn the filtering engine On or Off or DynamicOnly for cgi/php/etc 
SecFilterEngine On 

# Should mod_security inspect POST payloads 
SecFilterScanPOST Off 

# this rule allows wget but logs it so you can verify it if necessary 
SecFilter "wget\x20" "log,pass" 
</ifModule> 

我把兩個選項,以便您可以稍微玩它,它可能是可能是多個站點具體,但你需要閱讀對了mod_security rules

輕微編輯了一下:增加了wget的允許,但登錄規則.htaccess,這將讓你把SecFilterScanPOST爲開

+0

我在共享主機,所以我不認爲我可以配置這個modsecurity.conf文件。需要找到其他的選擇。 – Nehal

+0

你可以放入一個.htaccess文件,我會調整我的帖子以顯示它 –