2012-01-08 12 views
2

URLパスに基づいてフィルタリングされたWebページがあります。アドレスは次のようなものです:ウェブURLを参照するときにmysql注入を避ける方法

www.xxx.com/player-profile/?ID=130

ページは次のようにIDフィールドを用いて濾過する。

$playerid = $_GET['ID']; 

$result = mysql_query("SELECT * FROM tblPlayers Where lng_RecordID_PK LIKE ".$playerid.""); 

私がしたいですこのコードにセキュリティ上の問題がないことを確認してください。私は誰かがURLを試して操作するかもしれないと考えます。助言がありますか?

+0

にクエリを変更したいのでしょうか?注射を防ぐのは安全でしょうか? – Tarek

答えて

2

IDは数値なので、クエリが安全であることを確認する非常に簡単で非常に強力な方法があります。

$playerid = $_GET['ID']; 
if (!is_numeric($playerid)) { die(); } 
$playerid = mysql_real_escape_string($playerid); // Just in case 

このコードでは、URLに入力されたIDが基本的に数値であることを確認します。そうしないと、スクリプトの実行が停止します。数値の場合は、データの取得を継続し、SQLインジェクションを行う方法はありません。

:)

また、私はこのことについてわからないんだけど、何ちょうどint型としてそれをキャストについては、この

$result = mysql_query("SELECT * FROM tblPlayers WHERE lng_RecordID_PK = '".$playerid."' "); 
+0

(+1)ボックス外で考えている。でも、私は伝統的な本当のエスケープをやっています。それは余分な安全を傷つけることはありません。どのキャラクターエンコーディングがそれを防ぐのか知っている人。 – FakeRainBrigand

+0

ありがとう:)実際には、私は通常もそれをやっています。私の答えに追加しました – Tom

+0

優秀です。ありがとうございました。完璧に働いた! – DoubleA

2

addslashesまたはmysql_real_escape_stringのいずれかの機能を$playeridに使用してください。また、クエリに挿入する際には$playeridを引用符で囲みます。最後に、簡単な=が全く同じことをする場合は、LIKEを使用しないでください。

関連する問題