-1

データベースへのSQLインジェクションを防ぐ方法を知る必要があります。インターネットで多くのブログと回答を読みましたが、どの方法を優先または最適にするかを正当化できませんでした。mysql と同じように:

 mysqli:
mysql_real_escape_string.

または使用して

Using PDO:

ユーザーがデータベースに何かを挿入すると、SQL インジェクションに対して脆弱になるかどうかを知っています。通常、挿入には次のコードを使用します。

<?php
$con=mysql_connect("localhost","root","");
$db=mysql_select_db("test",$con);
$foo=$_POST['foo'];
$boo=$_POST['boo'];

$insert="insert into table set foo='$foo',boo='$boo'";

データベースへのインジェクションを防ぐために何をすべきか.....どんなアイデアでも大歓迎です..事前に感謝します

4

3 に答える 3

2

以下のコードをよく知っている場合、それを PDO に変換すると次のようになります。

FROM SQL コード:

<?php
$con=mysql_connect("localhost","root","");
$db=mysql_select_db("test",$con);
$foo=$_POST['foo'];
$boo=$_POST['boo'];
$insert="insert into table set foo='$foo',boo='$boo'";

TO PDO コード:

<?php
$con= new PDO('mysql:host=localhost; dbname=xxxx', 'username', 'password')
$stmt = $con->prepare('INSERT INTO Table (foo, boo) VALUES (?,?)');
$stmt->execute(array($_POST['foo'], $_POST['boo']))

PDO は、同じインスタンスですべてを一緒に実行する mysql とは異なり、クエリを準備してから実行するのに役立ちます。

今、$con = new PDO()非常によく似ておりmysql_connect()mysql_select_db()接続を開きます。

$stmt 次のように、返されたクエリを保持する変数です。これは$result実際にコードを実行します。つまり、すべての SQL クエリが準備されてから実行され、次々と SQL インジェクションがほぼ不可能になります。$result = mysql_query()execute()

これは、PDO http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developersについて学びたい場合の基本的で優れたチュートリアルです 。

于 2013-05-18T13:16:53.650 に答える
1

直接クエリの代わりにストアド プロシージャを使用することで、システムへの SQL インジェクションを防ぐことができます。

于 2013-05-18T13:19:29.863 に答える
1

いくつかの理由から、PDO を使用する必要があります。

1)パラメータ化されたクエリがあるため、SQLインジェクションはありません

2) PHP の mysql 関数は、PHP 5.5.0 で廃止されました。

于 2013-05-18T13:16:27.103 に答える