ホームページ >バックエンド開発 >PHPチュートリアル >PDO による SQL インジェクションの防止に関連する問題

PDO による SQL インジェクションの防止に関連する問題

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-13 11:59:29938ブラウズ

PDO が SQL インジェクションを妨げている問題について

この投稿の最終編集者は sky94132003 2014-06-10 03:40:33 私はまだ php の初心者です
最近始めたばかりですpdo を使用してください


アドバイスをお願いします
mysql_real_escape_string

については以前は知っていましたが、最近、pdo では mysql_real_escape_string
を使用できないことを知りました。この関数は、最初に接続するために mysql_connect() を使用しているようです。使用すると便利です

前処理と連携するには、bindParam やその他の書き込みメソッドを使用する必要があることもわかっています


$stmt = $ dbh->prepare ("INSERT INTO user (firstname, lastname ) VALUES (:f-name, :s-name)");
$stmt ->bindParam(':f-name', 'John' );
$stmt ->bindParam(': s-name', 'Smith');
$stmt ->execute();


お聞きしたいのですがbindingParam が十分に安全であれば?

bindValue を使用する方が良いでしょうか?



2 つの提案

mysql_real_escape_string より面倒?

mysql_real_escape_string の処理後....write データベースに入るとき

Tom's Book は PHP では Tom's Book

として表示されますが、データベースに書き込むときは、Tom's Book

のみが保存されます。最前面に表示すると、純粋な SELECT にはセキュリティ上の問題がないはずなので、非常に便利です。

しかし、ここで問題が発生します。問題

bindParamはデータベースに保存しても自動的にエスケープされるため、フロントデスクのどこでstripslashes()関数を使用する必要があるのか​​わかりません。

難易度は上がりますか?

この問題の可能性は 3 つだけですよね?

1. PDO で SQL インジェクションを防ぐ他の方法はありますか?保存していますか?
2. 設定ファイルに何か追加されている可能性があります...サイト全体にスラッシュを追加します() それは不可能だと思われますか?
3. 正直に言うと、日付またはカテゴリを除きます。 ID を 1 つずつ追加していきますか?



私もアドバイスを求めたいです。
$stmt = $dbh->prepare ("INSERT INTO user (firstname, lastname. ) VALUES (:f-name, :s-name)");
$stmt ->bindParam(':f -name', 'John');
$stmt ->bindParam(': s-name', 'Smith');
$stmt ->execute();

以外に、このタイプの書き方は妥当ですか?

公式は、PDO を使用する場合は 5.3.6 にアップグレードする必要があるとも示唆していますが、5.4 に直接アップグレードする方がよいでしょうか?
------解決策--------------------------
前処理後に実行する方法と、パス
を直接クエリする方法の 2 つのオプションがあります。 quote はエスケープであり、前処理された実行は自動的に暗黙的に実行されます
クエリの場合は明示的に実行する必要があります
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。