構造が常にZZZZ111である7文字の英数字のテキスト文字列を取得し、MySQLクエリでそのレコードIDのすべての関連データをプルするために使用されるレコード編集リンクがあります。
mysql_real_escape_string()
これを消毒するために必要なのはすべてですか$_GET['id']
?または、データベースを保護するために実行する手順は他にもありますか?
構造が常にZZZZ111である7文字の英数字のテキスト文字列を取得し、MySQLクエリでそのレコードIDのすべての関連データをプルするために使用されるレコード編集リンクがあります。
mysql_real_escape_string()
これを消毒するために必要なのはすべてですか$_GET['id']
?または、データベースを保護するために実行する手順は他にもありますか?
mysql_real_escape_string()
悪意のある文字をエスケープします。さらに、次のような正規表現を使用/^[A-Za-z]{4}\d{3}$/
して、ユーザーが実際に有効な入力を入力したことを確認できます。
SQL クエリに対して入力を安全にするには、mysql_real_escape_string()
それで十分ですが、PDO と準備済みステートメントに切り替えることをお勧めします。それらは少し使いやすく、少し効率的である傾向があります (ステートメントは 1 回だけ解析され、クエリは再利用できます)。
ただし、ホワイトリストに基づいてフィールドから HTML をフィルタリングするなどして、ページがクロスサイト スクリプティングの影響を受けないようにする必要もあります。
ユーザーにデータを表示する予定がある場合は、HTML タグも削除する必要があります。たとえば、誰かが悪意のある JavaScript をゲストブックの投稿に挿入したのではないでしょうか?
これはhttp://php.net/manual/en/function.htmlentities.phpで行うことができます
または、inputfilter クラスを使用して特定のタグなどを許可することもできます。
mysql_real_escape_string() は良い出発点であり、プリペアド ステートメントを使用することが非常に良い選択であることに同意します。Zend_Dbは、PDO の操作を容易にする DB 抽象化を調べたい場合に便利です。
また、これを機会として、入力用のある種の RegEx バリデーターを作成したいと思います。開始できる正規表現の例は次のとおりです。
[A-Z]{4}[0-9]{3}
PHP と正規表現の詳細については、http: //www.regular-expressions.info/php.htmlを参照してください。
mysql_real_escape_string
のために仕事をするべきです$_GET['id']
。また、 PDOを介して準備されたステートメントを見てください。