2011-01-21 8 views
1

私はhtaccessファイルに次のルールがあります。htaccess書き換えルールはSQLインジェクションを防止するのに役立ちますか?

私は、次のURLを持っている場合はhttp://www.example.com/this-is-a-title

は、SQLインジェクションに$url変数対象となり、または私はいけない:私の質問はこれです

RewriteRule ^([a-zA-Z0-9\-\_]+)/?$ test.php?&url=$1 [L] 

をRewriteRuleは文字、数字、ダッシュ、アンダースコアのみを許可し、引用符やアポストロフィや+記号は許可しないので心配はありませんか?

編集:これはURLであれば何が起こっている問題

フォローアップ ? http://www.example.com/this'is"a+title

URLバーに配置すると、404エラーが表示されますが、実際には何が起こっていますか。記号' " +は無視されているか、剥奪されていますか?

答えて

2

データを適切に照合する前に、データを適切に浄化しないと、SQLインジェクション攻撃に対して脆弱であるとみなされるべきです。 .htaccessのリライトを使用することは、SQLインジェクションを防止する習慣ではありません。

使用mysql_real_escape_stringまたはpg_escape_string(PHPを使用している場合)またはPOSTまたはGETからの変数を使用して、すべてのクエリに準備された文を使用しています。常に。

+0

なぜ受け入れられないのですか?上記の '.htaccess'ルールでどのような条件でインジェクション攻撃が働くのでしょうか?私は同意しない、私はちょうど理由を知りたい。 – kylex

+1

あなたの*守備陣としては受け入れられません。あいまいさによるセキュリティは決して実践すべきではありません。それには、直接URLを把握してそれを利用する人が1人必要です。あなたはいつも、いつも、常にデータがデータベースに保存されるべきです。 **常に。** –

+0

意味があります!ありがとう – kylex

1

理論上、変数は注射の対象ではない。しかし、あなたはまだあなたの入力を消毒する必要があります。誰かが別の方法でサーバーを攻撃すると、.htaccessが無視される可能性があるため、これはベストプラクティスです。

1

スクリプト自体によって異なります。 0x2d3120756e696f6e2073656c656374202e2e2e2eのように、入力を16進数でエンコードすることができます。スクリプトがそれを解読すると、あなたの.htaccessはあなたを守ることができません。

関連する問題