2013-12-08 10 views
7

私はいくつかの変数 (回答に時間がかかり、どの回答オプションがユーザによって選択されたかなど)を保存するクイズサイトを構築しています。質問ごとに$_SESSION秒後に - ユーザがクイズを終了した後。

ifを実装して、これらの変数が数値(is_numeric())であるかどうかを確認しました。また、私は長さ(strlen())などを確認します。

  • しかし、それを行う理由はありますか?
  • をMySQLに保存する前には、real_escape_string()に十分ですか?
  • また、多くのユーザーがいる場合は、 サーバーに大きな負荷をかけませんか?
+1

SQLインジェクションを防止することに興味がある場合は、PDOまたはmysqliをパラメータ付きのステートメントで使用する必要があります。そうすれば、あなたが挿入したものであっても、決してMySQLコードとして評価されることはありません。 – jpodwys

+0

私はSQLインジェクションについてしか話していません。ユーザーが渡す変数を使用して誰かが私のサイトを攻撃することができる他の方法はありませんか? – joe007

+0

@ joe007はい、XSSのようです。 –

答えて

8

いいえ、自分で設定したためです。

ユーザー入力のすべてのビットに適用されるのとまったく同じ規則が適用される場合はもちろん、それらをユーザー入力から直接推論する場合を除きます。

$_SESSION変数には特別なものはありません。ユーザからの入力を受け取ったときに、データベースやセッションなどに格納しているかどうかにかかわらず、ユーザ入力をサニタイズする必要があります。

JPodが示唆しているように、SQLクエリを実行するときは、常にSQLインジェクションを軽減する準備済みクエリを使用します。

+1

はい、私は_page1_に$ _SESSION変数を設定してから、_page2_で読み込んだとします。私が_page1_でそれを浄化し、_page2_でそれを気にしないならば、ハッカー/クラッカーはいくつかのソフトウェアを使って$ _SESSION経由で悪意のあるコード/ものを_page2_に直接送ることができますか? – joe007

+2

@ joe007フロントエンドユーザは '$ _SESSION'に直接アクセスすることはできません。あなたが入力前に入力を消毒するならば、それをセッション変数に入れます(あなたは常にそれを行うべきです)、それは魔法のように危険になることはありません。より一般的には、クライアントから得られるすべてのものを宗教的に、そして慈悲なしで浄化する必要があります。明確で、一貫性があり、明示的で、一箇所になければなりません。どのデータが汚れていて、どのデータがクリーンであるかは間違いありません。 –

+3

ああ、私はユーザーが何とか$ _SESSIONを書き換えることができないことを知りませんでした。どうもありがとうございました :) – joe007

関連する問題