目次
これは、各ラウンドでクエリ文字列を組み立てる必要がなく、SQL を複数回使用できるように準備されています (パラメータのみが異なります)
ホームページ バックエンド開発 PHPチュートリアル PDO アンチ SQL インジェクションの問題について

PDO アンチ SQL インジェクションの問題について

Jun 23, 2016 pm 01:55 PM
pdo sql 注射

PHP はまだ初心者です。私は最近 PDO に切り替えたばかりです






mysql_real_escape_string

を使用していることは知っていましたが、最近、PDO は 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 が十分に安全かどうかを尋ねたいのですが



質問 2


mysql_real_escape_string? mysql_real_escape_string の処理後... ..データベースに書き込むとき

Tom's Book は PHP では Tom's Book として表示されます

ただし、データベースに書き込むときは Tom's Book のみが保存されます

表示されると非常に便利ですフォアグラウンドでは、結局のところ、純粋な SELECT なので、セキュリティの問題はないはずです...

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

bindingParam は自動的にエスケープされ、データベースにも保存されるため、フロントエンドでstripslashes()が必要な場所を知っていますか? この関数の難易度はあらゆる場所で増加していますか?

この質問には 3 つの可能性しかありませんね

1. PDO には SQL インジェクションを防ぐ他の方法がありますか?保存するときに「」記号を保存する必要がありますか?
2. 設定ファイルに何か追加する必要がありますか? サイト全体にstripslashes() を追加するのは不可能だと思いますか?
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 に直接アクセスする必要がありますか?




ディスカッションへの返信 (解決策)

私は本当に初心者で、PDO::quote メソッドの存在をまだ知りません

PDO は 5.3.6 まで実用的な価値がないため、PDO を使用するには 5.3.6 にアップグレードする必要があります。以前のバージョンにはすべて、さまざまな深刻な問題があります

prepare prepare
bindingParam バインドパラメータ

これは、各ラウンドでクエリ文字列を組み立てる必要がなく、SQL を複数回使用できるように準備されています (パラメータのみが異なります)

php には、magic_quotes_gpc が渡されます外部データをエスケープするかどうかを決定するために使用されます
PHP 5.3.6 以降はデフォルトで無効になります
PHP 5.4.0 以降はその存在を無視します
言い換えると、セキュリティの問題はユーザー自身の問題であり、PHP はそれを行うつもりはありませんあなた

使用した
prepare
bindingParam

十分ではありませんか

PDO::quote を使用する必要がありますか


そこで聞きたいのですが

quote replace prepare を使用しないのですか
前処理またはバッチ挿入はできませんか? ?

前処理後に実行する方法と直接クエリを使用する方法があります。
前処理された実行は暗黙的に自動的に実行されます。


前処理後は、execute と direct を使用する 2 つの方法があります
quote はエスケープであり、前処理された実行は暗黙的に自動的に実行されます

クエリの場合は自分で明示的に実行する必要があります

わかりました

でも。 ...

$sql = "INSERT INTO foo (id,name) VALUES ('',:name)";

$stmt = $pdo->prepare($sql);


$stmt->bindParam( ':name', $name);

$name = $pdo->quote($_POST["name"]);


たとえば、次のように入力すると: ピーターの本

でも、なぜ「ピーターの本」として保存されるのですか

これは正常ですか?

出力に何らかの処理を行う必要がありますか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Apr 17, 2024 pm 02:57 PM

HQL と SQL は Hibernate フレームワークで比較されます。HQL (1. オブジェクト指向構文、2. データベースに依存しないクエリ、3. タイプ セーフティ)、SQL はデータベースを直接操作します (1. データベースに依存しない標準、2. 複雑な実行可能ファイル)。クエリとデータ操作)。

Oracle SQLでの除算演算の使用法 Oracle SQLでの除算演算の使用法 Mar 10, 2024 pm 03:06 PM

「OracleSQLでの除算演算の使用方法」 OracleSQLでは、除算演算は一般的な数学演算の1つです。データのクエリと処理中に、除算演算はフィールド間の比率を計算したり、特定の値間の論理関係を導出したりするのに役立ちます。この記事では、OracleSQL での除算演算の使用法を紹介し、具体的なコード例を示します。 1. OracleSQL における除算演算の 2 つの方法 OracleSQL では、除算演算を 2 つの異なる方法で実行できます。

Oracle と DB2 の SQL 構文の比較と相違点 Oracle と DB2 の SQL 構文の比較と相違点 Mar 11, 2024 pm 12:09 PM

Oracle と DB2 は一般的に使用される 2 つのリレーショナル データベース管理システムであり、それぞれに独自の SQL 構文と特性があります。この記事では、Oracle と DB2 の SQL 構文を比較し、相違点を示し、具体的なコード例を示します。データベース接続 Oracle では、次のステートメントを使用してデータベースに接続します: CONNECTusername/password@database DB2 では、データベースに接続するステートメントは次のとおりです: CONNECTTOdataba

MyBatis動的SQLタグのSetタグ機能の詳細説明 MyBatis動的SQLタグのSetタグ機能の詳細説明 Feb 26, 2024 pm 07:48 PM

MyBatis 動的 SQL タグの解釈: Set タグの使用法の詳細な説明 MyBatis は、豊富な動的 SQL タグを提供し、データベース操作ステートメントを柔軟に構築できる優れた永続層フレームワークです。このうち、Set タグは、UPDATE ステートメントで SET 句を生成するために使用され、更新操作でよく使用されます。この記事では、MyBatis での Set タグの使用法を詳細に説明し、特定のコード例を通じてその機能を示します。 SetタグとはMyBatiで使用するSetタグです。

SQL の ID 属性は何を意味しますか? SQL の ID 属性は何を意味しますか? Feb 19, 2024 am 11:24 AM

SQL における Identity とは何ですか? 具体的なコード例が必要です。SQL では、Identity は自動インクリメント数値の生成に使用される特別なデータ型です。多くの場合、テーブル内のデータの各行を一意に識別するために使用されます。 Identity 列は、各レコードが一意の識別子を持つようにするために、主キー列と組み合わせてよく使用されます。この記事では、Identity の使用方法といくつかの実用的なコード例について詳しく説明します。 Identity の基本的な使用方法は、テーブルを作成するときに Identity を使用することです。

PHP PDO と mysqli: 比較対照 PHP PDO と mysqli: 比較対照 Feb 19, 2024 pm 12:24 PM

PDOPDO は、PHP に統合インターフェイスを提供するオブジェクト指向のデータベース アクセス抽象化レイヤーであり、同じコードを使用して異なるデータベース (Mysql、postgresql、oracle など) と対話できるようにします。 PDO は、基礎となるデータベース接続の複雑さを隠し、データベース操作を簡素化します。長所と短所 長所: 統一されたインターフェイス、複数のデータベースのサポート、データベース操作の簡素化、開発の困難さの軽減、プリペアドステートメントの提供、セキュリティの向上、トランザクション処理のサポート 短所: パフォーマンスはネイティブ拡張よりわずかに低い場合があり、外部ライブラリに依存し、オーバーヘッドが増加する可能性があります。デモ コードでは PDO を使用します。 mysql データベースに接続します: $db=newPDO("mysql:host=localhost;dbnam

SQL の 5120 エラーを解決する方法 SQL の 5120 エラーを解決する方法 Mar 06, 2024 pm 04:33 PM

解決策: 1. ログインしているユーザーがデータベースにアクセスまたは操作するための十分な権限を持っているかどうかを確認し、ユーザーが正しい権限を持っているかどうかを確認します; 2. SQL Server サービスのアカウントに指定されたファイルまたはデータベースにアクセスする権限があるかどうかを確認します。 3. 指定されたデータベース ファイルが他のプロセスによって開かれているかロックされているかどうかを確認し、ファイルを閉じるか解放して、クエリを再実行します。管理者として試してください。Management Studio をなどとして実行します。

PHP PDO チュートリアル: 基本から習得までの上級ガイド PHP PDO チュートリアル: 基本から習得までの上級ガイド Feb 19, 2024 pm 06:30 PM

1. PDO の概要 PDO は、データベースを操作するためのオブジェクト指向の方法を提供する PHP の拡張ライブラリです。 PDO は、Mysql、postgresql、oracle、SQLServer などのさまざまなデータベースをサポートします。 PDO を使用すると、開発者は統合 API を使用してさまざまなデータベースを操作できるため、さまざまなデータベースを簡単に切り替えることができます。 2. PDO はデータベースに接続します PDO を使用してデータベースに接続するには、まず PDO オブジェクトを作成する必要があります。 PDO オブジェクトのコンストラクターは、データベース タイプ、ホスト名、データベース ユーザー名、およびパスワードの 3 つのパラメーターを受け取ります。たとえば、次のコードは、mysql データベースに接続するオブジェクトを作成します。 $dsn="mysq

See all articles