>、」、「)、およびOWASPは、スラッシュ(/)だけでなく、PHPの組み込みなど、推奨しています、htmlentities()
はあなたのための最初の部分を行います、と簡単なstr_replace()
がスラッシュを行うことができます。
function makeHTMLSafe($string) {
$string = htmlentities($string, ENT_QUOTES, 'UTF-8');
$string = str_replace('/', '/', $string);
return $string;
}
しかし<a
のhref=
節のように汚染された値をHTML属性に入れる場合は、別の文字セット([space]%* +)をエンコードする必要があります。 、 - /; < => ^および|) - とあなたは二重引用符あなたのHTML属性をする必要があります。
function makeHTMLAttributeSafe($string) {
$scaryCharacters = array(32, 37, 42, 43, 44, 45, 47, 59, 60, 61, 62, 94, 124);
$translationTable = array();
foreach ($scaryCharacters as $num) {
$hex = str_pad(dechex($num), 2, '0', STR_PAD_LEFT);
$translationTable[chr($num)] = '&#x' . $hex . ';';
}
$string = strtr($string, $translationTable);
return $string;
}
最終懸念が違法なUTF-8で文字-一部のブラウザに配信、病気に形成されたUTF-8バイトのシーケンスHTMLエンティティから抜け出すことができます。その正規表現に
function assertValidUTF8($string) {
if (strlen($string) AND !preg_match('/^.{1}/us', $string)) {
die;
}
return $string;
}
u
修飾子は、Unicodeのマッチングの正規表現ます:。これを防ぐために、単にあなたが得るすべてのUTF-8文字が有効であることを確認単一のchararchter、.
を照合することによって、文字列全体が有効なUnicodeであることが保証されます。
これはすべてコンテキスト依存であるため、出力をユーザーに提示する直前に、できるだけ早くこのエンコーディングを実行することをお勧めします。このプラクティスに参加することで、あなたが逃した場所を簡単に見ることができます。
OWASPは、XSS prevention cheat sheetに関する多くの情報を提供します。
SQL注入を避けるには、準備された文を使用してください。 http://php.net/manual/en/pdo.prepared-statements.php –