私たちが知っているように、通常のサイトは次のような関数を使用し、mysql の PHP ドライバーは->query() 呼び出しmysqli_query()
で複数のクエリを許可していません(ただし、 phpmyadmin SQL 実行セクションではいくつでも実行できます)。したがって、直接追加することはできませんが、変更の可能性を悪用します。状況によってはデータ。1つ目は、その場合、潜在的に危険にさらされている(おそらくデータが失われる)80%がなくなったと思うということです!& 2 つ目は、この知識に頼って、なぜ注入チュートリアルのほとんどが複数のクエリに基づいて焦点を合わせているのですか?single
DELETE/UPDATE/INSERT
2 に答える
危険にさらされる可能性 (おそらくデータの損失) の 80% がなくなりました!
この仮定は間違っています。
注入チュートリアルのほとんどが複数のクエリに基づいているのはなぜですか?
これは単純でわかりやすい例であり、概念実証です。「ジョンがりんごを2つ、マイクがりんごを5つ持っていたら…」のように。本物のマイクが自分のりんごを惜しむ気がしないとしても、それは算数がすべて間違っているという意味ではありません。
SQL インジェクションの難問
注射には難問はありません。
注射について黙想しても意味がありません。
計算するリスクの割合はありませんが、アプリケーションが侵害されているかどうかの二分法にすぎません。
単純なルールは 1 つだけです。常にデータを適切にフォーマットすることで、インジェクションのことを永遠に忘れることができます。
PHP は長い間、単一の query() ステートメントに対して複数のクエリを実行することを許可していませんでした。これは、SQL インジェクションを防止するためのほんの一部です。また、入力をエスケープし、準備されたステートメントを使用し、テーブル名と列を推測しにくくする必要があります。
SQL インジェクション攻撃の最も単純な例には、だまされて複数のクエリを実行するクエリが含まれますが、明らかに php は、前述の制限によって多くのそのような攻撃を防ぎます。ただし、サブクエリなどはまだ可能であるため、絶対確実ではありません。人々がスクリプトをだます新しい方法を見つけ続けているため、SQL インジェクションを完全に不可能にすることはできないと思います。
できる最善のことは、そのような攻撃がどのように行われるかを知り、そのような攻撃を防ぐために現在受け入れられているベスト プラクティスに従ってコードを記述することです。これらすべてを実行してもハッキングされる場合は、おそらく (確実ではありませんが) セキュリティの最も弱いリンクは SQL ではありません。私の理解では、ハッカーはソーシャル エンジニアリング手法を使用して成功することが多いようです。
ハッキング不可能なシステムを作ることはほとんど不可能です。そのため、あなたができる最善の方法は、ハッキングを困難にすることです。したがって、「簡単な目標」にならないようにすること、つまり、簡単な標的にならないようにすることです。