2016-07-22 14 views
0

私はいくつかのSQL注入保護チュートリアルで指摘したように、 "のように言います " - またはそれに沿ったもの..なぜ出力がブラウザに出力されないようにする必要があるのですか?

しかし、なぜこれが必要なのか混乱しています。

その理由の1つは次のとおりです。あなたは通常、データベースへの入力時にデータをエスケープして浄化しないので、再び出力時に再浄化する必要がなくなります。

ちょっと私には意味がないように見えます。なぜこれが必要であるかについての答えを探していますが、どのような攻撃からも保護する方法を説明するページは見つけられないようです。

誰かが私を埋めることができれば、それは非常に、

おかげでいただければ幸いです。

+0

Prepared Statementsを使用すると入力をエスケープしません。あなたはSQLインジェクションのために逃げました。あなたはXSSのために出力を消毒します。 HTML特殊文字を代表HTMLコードに変換するので、ブラウザはHTMLとして解析しません。 –

+0

@CharlotteDunois編集をご覧ください。私は偽造と逃避が混在しているようです。 –

答えて

1

データベースはウェブページではありません。

SQLの文字列に配置するデータを安全にすることは、HTMLドキュメントに配置するデータを安全にするものと同じではありません。

たとえあったとしても、データベースからデータを読み取ると、エスケープされていないデータが得られます。簡単な例を取る:INSERT INTO foo (a, b) VALUES ('John', 'O\'Brian'):が指定されている場合、\はデータベースに挿入されません。 'がSQLの文字列を終了するのを止めるだけです。


データベースにデータを挿入するとき、あなたはそれをエスケープ(またはプリペアドステートメントを使用)SQLインジェクション攻撃から守るためにする必要があります。

ウェブページにデータを挿入するときに、XSS攻撃から守るために、エスケープする(またはDOMベースのホワイトリストフィルタを使用する)必要があります。

今、あなたはあなたの代わりにあなたがページに挿入するとのデータベースにデータを挿入する際にXSSに対する防御しようとすることができ、それは時期尚早であるとラインの下の大きな問題を引き起こす可能性があります。これは、テキストではなくデータベースにHTMLを保存することを意味します。これは、テキストを他の目的(電子メールに挿入する、または検索するなど)で使用すると判断した場合にはあまり役に立ちません。

+0

データをエスケープするために '\\' 'が使用されていることは知っています。しかし、 'htmlspecialchars'(例えば)関数はどうでしょうか?何も理由なく入力と出力で2回使用するのはなぜですか?私にはちょっと似ているようだ。奇妙な質問の申し訳ありません、ちょうど非常に興味深い –

+1

@CaelanGrgurovic - あなたはしていません。 HTMLにデータを挿入するときに使用します。データをSQLに挿入するときには使用しません。 – Quentin

+0

ohh。私が見たチュートリアルの奇妙な点は、これを別の方法で見て、入力と出力のデータを入力またはORで消滅させるだけです。 –

-1

まず、データをデータベースに挿入する前にエスケープするなどのチュートリアルは、ほとんどの場合、不良または古いものです。手動でデータをエスケープするのではなく、常にパラメータ付きのプリペアドステートメントを使用してください。

出力データをエスケープすると、ユーザーに対するクロスサイトスクリプティング(XSS)攻撃を防止できます。

関連する問題