PHPの$ _GET変数のデータをどのようにサニタイズしますか?
strip_tags
でGETの変数を1つだけサニタイズします。前回Postgresにデータを入力したとき、問題はpg_prepare
を使用することで最も簡単に解決されたため、すべてをサニタイズする必要があるかどうかはわかりません。
出力のサニタイズについて話している場合、データベースにコンテンツを完全なエスケープされていない形式で保存し、データをエコーアウトするときにそれをエスケープすることをお勧めします( htmlspecialchars または何か)出力にはさらにオプションがあります。データベースコンテンツのサニタイズ/エスケープについては this questionをご覧ください。
Postgresへの保存に関しては、クエリ内の各変数で pg_escape_string を使用して、引用符をエスケープし、一般的にSQLインジェクションから保護します。
編集:
データベースにデータを保存してから取得するための私の通常の手順は次のとおりです。
データベースデータエスケープ関数(pg_escape_string、mysql_escape_stringなど)を呼び出して、クエリで使用される各着信$ _GET変数をエスケープします。 addslashesの代わりにこれらの関数を使用すると、データベースに保存されるときにテキストに余分なスラッシュが含まれないことに注意してください。
データベースからデータを取り戻す場合、余分なスラッシュはないはずなので、出力されたデータにhtmlspecialcharsを使用するだけで、ストリップスラッシュを使用する必要はありません。
POST= GETとしてだけでなく、すべてのリクエストをサニタイズする必要があります。
関数 htmlentities() 、regexを使用した関数preg_replace()、またはキャストによるフィルターを使用できます。
<?
$id = (int)$_GET['id'];
?>
[]の
入力に応じて入力をサニタイズします。
htmlspecialchars
および/または_str_replace
_を使用します。POSTまたはDBのデータでさえも同じです。DB内のデータは一般にエスケープされるべきではないためです。
確認すべき2つのこと:
[magic_quotes_gpc][1]
_が有効になっている場合は、無効にするか(可能な場合)またはstripslashes()
GET、POSTおよびCOOKIE値。_magic_quotes_gpc
_は非推奨です。そのデータのseに応じて、操作するデータをサニタイズする必要があります。