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 preparebindingParam バインドパラメータ
これは、各ラウンドでクエリ文字列を組み立てる必要がなく、SQL を複数回使用できるように準備されています (パラメータのみが異なります)
php には、magic_quotes_gpc が渡されます外部データをエスケープするかどうかを決定するために使用されます
PHP 5.3.6 以降はデフォルトで無効になります
PHP 5.4.0 以降はその存在を無視します
言い換えると、セキュリティの問題はユーザー自身の問題であり、PHP はそれを行うつもりはありませんあなた
使用した
prepare
bindingParam
十分ではありませんか
そこで聞きたいのですが
quote replace prepare を使用しないのですか
前処理またはバッチ挿入はできませんか? ?
前処理後に実行する方法と直接クエリを使用する方法があります。
前処理された実行は暗黙的に自動的に実行されます。
前処理後は、execute と direct を使用する 2 つの方法があります
quote はエスケープであり、前処理された実行は暗黙的に自動的に実行されます
わかりました
でも。 ...
$stmt = $pdo->prepare($sql);
$stmt->bindParam( ':name', $name);
たとえば、次のように入力すると: ピーターの本
でも、なぜ「ピーターの本」として保存されるのですか
これは正常ですか?
出力に何らかの処理を行う必要がありますか?

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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