2012-02-27 9 views
1

を持っている:SQLインジェクションPHP:パラメータ化クエリを使用してユーザ入力を検証する必要がありますか?例えば、私は、この入力を

ウォーリー

メール[email protected] '; DROP TABLE ClientTable; PRINT「!あまりにも悪い」 -

私のパラメータ化クエリは次のとおりです。

$name = $_REQUEST['name']; 

$email = $_REQUEST['email']; 

$sql = "INSERT INTO ClientTable (Name, Email) 

     VALUES ('$name', '$email')"; 

私は、このパラメータ化クエリを使用する場合でも、私は、ユーザー入力を検証する必要がありますか? (この場合は、電子メールフィールド)

または、私はパラメータ化されたクエリを使用しているので、既に安全です。クエリはこのすべてを単純に保存します: '[email protected]'; DROP TABLE ClientTable; PRINT 'あまりにも悪い!' - 'はデータベースにありますか?

ありがとうございました!

+9

を使用することができます... all.httpではない://27.media.tumblr.com/tumblr_lwru33NE821r803nno1_500.jpg –

+2

あなたは[こちら]を参照することができます[1] [1]:http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php – JackTurky

+0

私はどんなユーザー入力をチェックしませんが、多分私です私はちょうどパラノイド... –

答えて

1

あなたはより多くのこのような何かを行う必要があります。

$sql = sprintf("INSERT INTO ClientTable (Name, Email) VALUES ('%s', '%s')", mysql_real_escape_string($name), mysql_real_escape_string($email)); 
+0

実際、@JackTurkyが投稿したリンクが好きです。私はその方法について知らなかった。私はちょうど私の方法でそれを行うPHPラッパークラスを書いたが、私はそれを変更することがあります。 – Travesty3

+0

PHPラッパークラスも書いてありますが、何かに変更する必要はありません –

+0

回答と役に立つリンクをありがとうございました。 –

0

パラメータ化クエリが脱出の世話をします。あなたはまだデータを検証したいと思うかもしれません。たとえば、電子メールが少なくとも[email protected]のようなもので、電話番号は数字などで構成されていることを確認したいと思うかもしれません。

しかし、変数置換を使用している例では、パラメータ化されたクエリを使用しないでください。パラメータ化されたクエリはPrepared Statementを意味します。

+0

回答と有用なリンクありがとうございました –

1

あなたはパラメータ化クエリではありません

$unsafe_variable = $_POST["user-input"]; 
$safe_variable = mysql_real_escape_string($unsafe_variable); 

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')"); 
+0

なぜ-1?あなたはplsを説明できますか? – JackTurky

+1

理由がわからない-1。それを元に戻す+1 :-) – Travesty3