0

SQL インジェクション ホールの特定と修正に取り組んでいます。多くの場所で pdo/prepared ステートメントへの変換を行いました。

ただし、次のようなページが 1 つあります。

www.site.com/domain/products/12345/description-of-the-product

htaccess では、これは次のように書き換えられます。

www.site.com/domain/product.php?id=12345

htacess は次のようになります。

RewriteRule ^(.*)/products/([0-9]+)/([^/\.]+)/?$ /$1/product.php?id=$2 [L]

それで、ここに私の質問があります:URLはmod_rewriteで書き換えられているため、ingtegersに対してのみ一致していますが、これはSQLインジェクションに対する保護ですか? 整数以外の URL を試してみると、ページが存在せず、mod_rewrite がアクティブ化されていないため、ユーザーは 404 エラーを受け取るだけですか?

前もって感謝します。

4

4 に答える 4

0

いいえ。これにより URL がきれいになりますが、PHP コードのある時点でデータベースに送信できるテキスト情報が送信されます。そのため、確保する必要があります。

mysqli_real_scape_string($_GET['id')PHP で SQL インジェクションを防ぐにはどうすればよいですか? .

于 2013-05-29T20:48:39.147 に答える
0

入力データの検証と SQL の書式設定を混同しないでください。

この 2 つの問題は、決して混同してはなりません。

適切な SQL フォーマットは、保護のためではなく、単なる SQL 構文規則によって必要とされます。そして、準備されたステートメントは、構文的に正しいクエリを保証できるツールです。それでも、一貫して無条件に使用された場合にのみ、効果があります。

于 2013-05-29T20:50:04.567 に答える
0

いいえ。実際にはそうかもしれませんが、インジェクションを防ぐために頼るべき唯一の機能は、適切にエスケープされたコードであり、SQL インジェクションについて話している場合は、準備されたステートメントを介して行われます。キャラクターのインジェクションが問題を引き起こす可能性があるため、それでも十分ではない場合%

検証に必要なものは何でも使用でき、URL の書き換えは非常に優れている場合がありますが、これにより、クエリパラメーターをエスケープするステップを除外することはできません (できれば、適切にパラメーター化された準備済みステートメントを介して)。

于 2013-05-29T20:28:44.133 に答える
0

いいえ、そうではありません。悪意のあるユーザーが単に URL にアクセスできるからです。

www.site.com/domain/product.php?id=123'; DROP TABLE products;

mod_rewrite を完全にバイパスします。書き換えられるのは整数のみですが、使用するために書き換えられる URL は引き続き有効であり、アクセス可能です。SQL クエリを作成するときはいつでも、PDO などを使用して、その時点でクエリに入力されるすべての入力をサニタイズする必要があります。

于 2013-05-29T20:29:37.063 に答える