2012-02-15 4 views
1

SQLクエリに似たテキストを含むファイルを保存しようとすると、500 Internal Server Errorが発生します。だから、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"] 

だから私は

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

/フォルダ/アプリ/ 3 /管理/モジュール/製品上の.htaccessファイルを作成します。しかし、これはどちらかの問題を解決していません。私はまだApacheのログファイルにログエントリを持つ500のコードを取得しています。

これはなぜ機能しないのでしょうか?

+0

まず最初に、これを避ける必要がありますか?これは本当にトラブルを求めています。 – Oldskool

+1

このファイルは、データをデータベースに追加するPOST要求を処理します。 POST要求にはSQL文が含まれている可能性がありますが、これを回避する別の方法はありますか? – Straseus

+1

phpMyAdminにも同じ問題があります。彼らがそれを回避する方法を見つけることは面白いだろう - 編集:ああ、そうではありません。私の答えに編集を参照してください –

答えて

2

実際にはをこのファイルのに保存していますか?私はそれが想像するのは難しいと思う、それはApacheの管轄区域ではないからだ。問題を引き起こしているクエリ文字列にクエリが含まれているのではないでしょうか?

を迂回する可能性があります。などです。 (33%のサイズの増加がURLのサイズ制限をテストしない場合)、セッション変数にクエリを格納し、変数を指す一意のランダムキーのみを渡します。

編集:あなたは本当にあなたが後で実行ライブSQLクエリを送信している場合 - それをしないでください。このmod_securityフィルタが存在するのはまさにその理由です。

どちらの方法でも、データベース管理ツールphpMyAdminには同じ問題があります。実行中のライブクエリを送信します。 phpMyAdminとmod_securityを扱う多くの記事があります。 This oneは、無効にする他の多数のフィルタIDを示唆しています。 (理想的には、POSTデータを受け取る必要がある1つのファイルについてのみこれを実行します)。

+0

これは、Apacheによって傍受されているPOSTリクエストです。ファイルは実際にはフォームハンドラです。 – Straseus

+0

@Straseus編集を追加しました。 –

+0

どのようにBase64エンコードしますか?これは、PHPページに投稿するシンプルなフォームです。私はこれを行うには、JS ajaxを使用することができると思うが、私は可能な場合は避けることを望むだろう。 base64エンコーディングのアイデアは天才ですが! – Straseus

関連する問題