2012-02-15 98 views
1

當試圖用一些可能類似於sql查詢的文本保存文件時,出現500內部服務器錯誤。所以ModSecurity的阻止它:通過.htaccess刪除modsecurity規則

[client xxx.xxx.xxx.xxx] ModSecurity: Access denied with code 500 (phase 2). Pattern match "(insert[[:space:]]+into.+values|select.*from.+[a-z|A-Z|0-9]|select.+from|bulk[[:space:]]+insert|union.+select|convert.+\\\\(.*from)" at ARGS:description. [file "/usr/local/apache/conf/modsec2.user.conf"] [line "359"] [id "300016"] [rev "2"] [msg "Generic SQL injection protection"] [severity "CRITICAL"] [hostname "xxxxxxxxxxxxx.net"] [uri "/app/3/admin/modules/product/product_a.php"] [unique_id "TzvCxkPj2kkAAH4WkMwAAAAE"] 

所以我的文件夾/應用/ 3 /管理/模塊/產品創建一個.htaccess文件/

<IfModule mod_security.c> 
SecFilterRemove 300015 
SecFilterRemove 300016 
</IfModule> 

但這也不解決問題。我仍然在apache的日誌文件中獲得一個包含日誌條目的500條代碼。

任何想法,爲什麼這可能不工作?

+0

第一件事,爲什麼你有必要「避免」的呢?這真的是在惹麻煩。 – Oldskool 2012-02-15 14:46:14

+1

該文件處理POST請求以將數據添加到數據庫。 POST請求可能包含SQL語句,有沒有其他方法可以避免這種情況? – Straseus 2012-02-15 14:49:37

+1

phpMyAdmin必須有相同的問題。瞭解他們如何繞過它會很有趣 - 編輯:啊,他們沒有。請參閱編輯我的回答 – 2012-02-15 15:04:18

回答

2

是否真的是保存的問題是文件?我覺得很難想象,因爲這不是阿帕奇在atll的管轄權。不是說查詢字符串中的查詢造成麻煩嗎?

你可能能夠規避例如,通過對查詢進行base64編碼(如果33%的大小增加不測試URL的大小限制),或將查詢存儲在會話變量中,並只傳遞指向該變量的唯一隨機密鑰。

編輯:如果你真的發射以後要執行現場SQL查詢 - 不這樣做。這正是這個mod_security過濾器存在的原因。

無論哪種方式,phpMyAdmin,一個數據庫管理工具,都有同樣的問題:它傳輸實時查詢運行。有一些處理phpMyAdmin和mod_security的帖子。 This one建議一些其他過濾器ID禁用。第一個(理想情況下,你只會爲一個文件需要接收POST數據做到這一點。)

+0

這是一個由Apache攔截的POST請求。該文件實際上是一個表單處理程序。 – Straseus 2012-02-15 14:49:59

+0

@Straseus我添加了一個編輯。 – 2012-02-15 15:07:02

+0

我如何base64編碼?這是一個簡單的表單發佈到php頁面。我想我可以使用JS ajax來做到這一點,但如果可能的話,我寧願避免。雖然base64編碼思想是天才! – Straseus 2012-02-15 15:11:03