2011-06-30 13 views
2

2つのフィールド(タイトルとコメント)からなるコメントフォームがあります。データベースにはID、タイトル、コメントの3つの列があります。コメントは、それが適切にmysql_real_escape_stringのを使用して、SQLインジェクションのために確保されているdomain.com/index.php?id=sometitleコメントフィールドにSQLインジェクション

タイトルフィールドのようなtitleだが、テキストエリアで、コメント欄にはエスケープせずに開いたままにされるに基づいて表示されます。私はそれをエスケープすることができますが、私はその題名が既にエスケープされていることを知って、そのフィールドにmysql_real_escape_stringを使わずにそのまま放置すると、出力がどのように取得されるのかを知ることができますか?

+1

"私はそのフィールドでmysql_real_escape_stringを使わずに放置するだけでどんな害を受けることができるのでしょうか?" - データの価値はいくらですか? –

+1

MySqlにパラメータ化されたクエリはありませんか? –

+0

@mitch。これは問題ではありません。私はこれがどのように働くか知っているので、私は尋ねている。 – Pinkie

答えて

7

誰かがこれをあなたのテキストエリアに入力するとどうなるでしょう。

some comment');DELETE FROM COMMENTS;-- 

コメントを挿入するためのクエリが

INSERT INTO Comments(Title,Comment) VALUES('$title','$comments'); 

のようなものだったなら、あなたは問題があるでしょう。結果のクエリは

INSERT INTO Comments(Title,Comment) VALUES('some title','some comment');DELETE FROM COMMENTS;--' 

以上読みやすい形式で

INSERT INTO Comments(Title,Comment) VALUES('some title','some comment'); 
DELETE FROM COMMENTS;--' 

それをレイアウトするだろう - 」末端に、まさにそれだろう余分なSQLを取り除くために、コメントを作成し、それが適切に解析されないようにします。

+0

説明をありがとう。私は今それを理解する。 – Pinkie

2

すべてのエスケープされていない文字列を使用してSQLを挿入できます。

+0

私の質問には一例もありません。コメントフィールドはどのように注入を妨げているのですか? – Pinkie

+0

?私はあなたの問題が何であるか分かりません。 2つのフィールドには違いはありません。 – SLaks

+1

私のコメントが "What a great"のようなものであれば;テーブルをドロップする - 'ウェブサイト!'あなたは本当に困っているだろう。 –

2

誰かがテキスト領域でSQLインジェクションを使用すると、データがデータベースに送信されたときにSQLインジェクションが実行されるため、最初にエスケープする理由があります。

+0

コメントフィールドを挿入するとSQLインジェクションがどのように発生しますか?私たちは、出力されない入力について話しています。 – Pinkie

+0

http://en.wikipedia。org/wiki/SQL_injection – steve

+2

あなたのサイトへのリンクを教えてください。私はあなたを見せます... –

2

エスケープします。ユーザーがコメントを投稿していると仮定すると、コメントセクションには注入の脆弱性があり、コメントを表示する要求ではなくフォームを投稿すると実行されます。

2

フィールドをエスケープしないでください。フィールドがリンクされているかどうかは関係ありません。クエリが形成されるまでに、インジェクタはパスワードフィールドなどを返すことができます。

SQLインジェクションを使用する試みをすべてクリアするには、ストアドプロシージャを使用する必要があります。アクセス権がある場合は、PDOを使用する必要があります。

関連する問題