5

私はmysqliに関する多くの記事や質問を見てきましたが、それらはすべて、SQLインジェクションから保護すると主張しています。しかし、それはばかげた証拠ですか、それともそれを回避する方法がまだありますか?クロスサイトスクリプティングやフィッシング攻撃には興味がなく、SQLインジェクションだけに興味があります。

私が最初に言わなければならないことは、私が準備されたステートメントを使用しているということです。それが私がmysqliで意味したことです。文字列を連結せずにプリペアドステートメントを使用する場合、それは絶対確実ですか?

4

2 に答える 2

15

しかし、それはばかげた証拠ですか、それとも回避する方法がまだありますか.

いいえ、あなたは自分が何をしているのかを知らなければなりません。バインドされたパラメーター (MySqli に付属する機能) を使用すると、この攻撃ベクトルからのインジェクション タイプの攻撃から完全に保護されます。これは、プログラマーが文字列を直接埋め込んで、インジェクション攻撃を可能にすることを妨げるものではありません。意図したとおりに機能を使用する必要があります。

Re: 編集

最初に言っておくべきだったのは、準備済みステートメントを使用しているということです。それが私がmysqliで意味したことです。文字列を連結せずにプリペアド ステートメントを使用すると、誰でも簡単に実行できますか?

フールプルーフは、やはり危険な言葉です。ただし、準備済みステートメントを介してバインドされている変数に対するインジェクション攻撃からは安全です。これは、バインドされたパラメーターが SQL クエリとは別に送信されるためです。「従来の」埋め込み文字列アプローチでは、データベース サーバーは入力を解析する必要があり、その中には多くのエッジ ケース (文字セットなど) があります。データとクエリが別々に送信される場合、実際の解析は行われません (少なくとも変数データの解析は行われません)。

于 2009-03-03T12:01:50.150 に答える
0

古い mysql モジュールよりも優れた SQL インジェクションから保護するわけではありません。開発者が mysql_real_escape_string を呼び出す代わりにプリペアド ステートメントを使用できるようになるだけです。

于 2009-03-03T12:00:15.943 に答える