私は、それらを使用する前に、私のURLに変数を取得するための迅速かつ簡単な関数があるかどうか疑問に思っています.(または$_POSTが思い浮かびます...)
正規表現を使用して許可されていない文字を置き換えることができると思いますが、人々がこの種のことに何を使用しているかを知りたいですか?
私は、それらを使用する前に、私のURLに変数を取得するための迅速かつ簡単な関数があるかどうか疑問に思っています.(または$_POSTが思い浮かびます...)
正規表現を使用して許可されていない文字を置き換えることができると思いますが、人々がこの種のことに何を使用しているかを知りたいですか?
入力をクリーニングするという概念は、私にはあまり意味がありませんでした。ある種の入力は危険であるという仮定に基づいていますが、実際には危険な入力などはありません。入力を間違って処理するコードだけです。
その原因は、何らかの種類の文字列 (コード) 内に変数を埋め込み、それが任意の種類のインタープリターによって評価される場合、変数が適切にエスケープされていることを確認する必要があることです。たとえば、文字列を SQL ステートメントに埋め込む場合、この文字列内の特定の文字を引用符で囲んでエスケープする必要があります。URL に値を埋め込む場合は、 でエスケープする必要がありますurlencode
。HTML ドキュメント内に文字列を埋め込む場合は、 でエスケープする必要がありますhtmlspecialchars
。などなど。
前もってデータを「クリーン」にしようとするのは、その時点で、データがどのコンテキストで使用されるのかを知ることができないため、破滅的な戦略です。見当違いの考え。
正規表現は役に立ちます。また、PHP 5.2.0 では、さまざまな方法で入力変数をフィルタリングするための完全なフィルター拡張機能が導入されました。
入力変数の性質は非常に変化しやすいため、単一のソリューションを推奨することは困難です。:-)
以下の方法を使用して、MYSQL データベースで使用する入力をサニタイズします。要約すると、foreach を介して $_POST または $_GET 配列を繰り返し処理し、それぞれの $_POST または $_GET を DBSafe 関数に渡してクリーンアップします。DBSafe は、データ変数の他の用途 (HTML 出力など) のために簡単に変更できます。
// POST 配列を反復し、それぞれを DBSafe 関数に渡してデータをクリーンアップします foreach ($_POST as $key => $PostVal) { // POST 変数を通常の変数に変換します $$key=DBSafe($PostVal); // 上記のステートメントを使用して、POST または GET 配列をそのまま残し、新しい個々の変数を使用します // または、以下を使用して POST または GET 配列変数を更新します // POST 変数を更新します $_POST[$key]=DBSafe($PostVal); } function DBSafe($InputVal) { // DB 更新の MySQL セーフ値を返します。引用符で囲まれていない数値; 空の入力の場合は NULL。エスケープされた、「一重引用符で囲まれた」文字列値。 if (is_numeric($InputVal)) { $InputVal を返します。 } そうしないと { // サーバーの PHP と MySQL (つまり、magic_quotes) の設定によっては、escape_string は必要ない場合があります。必要に応じて、以下のコメントを外してください。 // $InputVal=mysql_escape_string($InputVal); $InputVal=(!$InputVal?'NULL':"'$InputVal'"); $InputVal を返します。 } }