-2

重複の可能性:
PHP で SQL インジェクションを防止する最善の方法

これは私の SQL クエリであり、SQL インジェクションをなくしたい

 $q1="insert into ecat_user(login_id,password,fullname,gender,disp_name,dob,";
 $q1.="street_addr,city,country,zip,email,aol,msn,icq,yahoo,homepg_link,homepg_caption,description,";
 $q1.="legal_guardian,phoneno,promotioncode,user_type,height,weight,chest,waist,inseam,eyecolor,haircolor,";
 $q1.="shoesize,biceps,collar,experience,travel,notes,added_on,updated_on) values('$modelName','$password','$firstName',";
 $q1.="'$gender','$description','$dob','$streetAddress','$city','$country','$zipCode','$emailAddress',";
 $q1.="'$aolID','$msnID','$icqID','$msnID','$homePage','$homePageCaption','$description','$legalGuardian',";
 $q1.="'$phoneNumber','$promotionalCode','','','','','','','','','','','','','','','','')";
 mysql_query($q1, $Conn);
 $id = mysql_insert_id();

提案してください。

4

4 に答える 4

6

古くてすぐに非推奨になるmysql_*関数の使用をやめ、代わりにPDOの使用を開始します。のドキュメントPDO::prepare()を見て、例を確認してください。

API の選択に関するマニュアル ページも参照してください。

mysqliまたはPDO_MySQL拡張子のいずれかを使用することをお勧めします。新しい開発に古い mysql 拡張機能を使用することはお勧めしません。

于 2012-08-23T12:19:51.873 に答える
0

それは、変数をどのように取得しているかに大きく依存します。

最善かつ最も安全な方法は、準備済みステートメントを使用することです。これらはステートメントで行うことができmysql_*ますが、おそらく PDO を使用する方がよいでしょう。

これは、PDO でプリペアド ステートメントを使用するサンプルです。

<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
?>

アイデアは、ステートメントを準備することです-それはデータベースにを期待すべきかを伝え、次に実行ステートメント中に配列で引数を渡します。面白いものはすべて方程式から外されます。

于 2012-08-23T12:20:09.287 に答える
0

すべての値をプレースホルダーに置き換え、送信前にステートメントを準備します。たとえば、PDO の場合。

于 2012-08-23T12:20:38.487 に答える
0

unsafe_variable で特殊文字をエスケープするか、パラメーター化されたクエリを使用するという 2 つのオプションがあります。どちらも SQL インジェクションから保護します。パラメーター化されたクエリはより良い方法と考えられていますが、変数内の文字をエスケープすると変更が少なくて済みます。

これは上記の記事で明確に説明され、クリアされています。完全に読んでください。

PHPでSQLインジェクションを防ぐにはどうすればよいですか?

于 2012-08-23T12:23:26.263 に答える