PHP・Mysqlを使用してSQLインジェクションについての質問です。
SQLインジェクション対策について皆様はどのようなコードを書いておられるでしょうか?
SQLインジェクションはエスケープをして対策をするかと思いますが、どの関数などを使い
どんなコードを書いていますでしょうか?
たとえば、以下を使うのが良いでしょうか?
http://php.net/manual/ja/pdo.quote.php
皆様のSQLインジェクションの対策を教えてください。
宜しくお願いします。
MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。
このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。
MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。
このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。
0グッド
2クリップ
投稿2014/10/25 12:48
PHP・Mysqlを使用してSQLインジェクションについての質問です。
SQLインジェクション対策について皆様はどのようなコードを書いておられるでしょうか?
SQLインジェクションはエスケープをして対策をするかと思いますが、どの関数などを使い
どんなコードを書いていますでしょうか?
たとえば、以下を使うのが良いでしょうか?
http://php.net/manual/ja/pdo.quote.php
皆様のSQLインジェクションの対策を教えてください。
宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
初めまして、K_T_T_Kさん。
解答失礼いたします。
SQLインジェクション対策のコードをどのようにしているかとのことですが、
私もTaMaMhyuさんと同じでPDOとbindParamを主に利用していますね。
bindParamでは少しコードが冗長になってしまいますので
値の数が少ない場合は配列で直接渡してしまう事もあります。
プリペアドステートメントを使い、プレースホルダーで値をセットする場合は
PHP側で自動的にエスケープ処理をしてくれますので、便利ですね。
bindParamを用いない場合
lang
1<?php 2 // 例:ユーザーが他のユーザーのIDを入力してデータを取得するプログラム 3 $pdo = new PDO(DSN, DB_USER, DB_PASSWORD); 4 5 $user_id = $_POST["user_id"]; 6 7 $sql = "SELECT * FROM users WHERE `user_id` = :user_id"; 8 $stmt = $pdo->prepare($sql); 9 $params = array(":user_id",$user_id); 10 11 $stmt->execute($params); 12?>
bindParamを用いる場合
lang
1<?php 2 // 例:ユーザーが他のユーザーのIDを入力してデータを取得するプログラム 3 $pdo = new PDO(DSN, DB_USER, DB_PASSWORD); 4 5 $user_id = $_POST["user_id"]; 6 7 $sql = "SELECT * FROM users WHERE `user_id` = :user_id"; 8 $stmt = $pdo->prepare($sql); 9 $stmt->bindParam(":user_id",$user_id); 10 11 $stmt->execute(); 12?>
bindParamを使う上での注意点(LIMIT句)
lang
1<?php 2 // 例:新規登録したユーザーを入力された数値分、表示するプログラム 3 $pdo = new PDO(DSN, DB_USER, DB_PASSWORD); 4 5 $limit = $_POST["limit"]; 6 7 $sql = "SELECT * FROM users ORDER BY created DESC LIMIT 0, :limit"; 8 $stmt = $pdo->prepare($sql); 9 $stmt->bindParam(":limit",$limit,PDO::PARAM_INT); 10 11 $stmt->execute(); 12?>
投稿2014/10/27 06:28
総合スコア113
0
PDOであればbindValueを使っています。
LIKE句には別の対応も必要だったと思いますが…
フレームワークを使う場合はフレームワークがだいたいやってくれるのであまり気にしていません。
投稿2014/10/25 12:58
総合スコア1356
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/10/25 13:46
2014/10/25 13:59
2014/10/25 23:32
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/10/27 10:35
2014/10/27 13:38