PHP アンチクロスサイト分析

WBOY
WBOYオリジナル
2016-06-23 14:30:561084ブラウズ

今日バグを修正していたときに、同僚が書いたコードにクロスサイトの脆弱性を発見したので、PHP のクロスサイトアンチクロスサイト関数 htmlentities() を追加しました。

これまでこの機能を注意深く分析したことがなかったので、ドキュメントに目を通し、侵入テストのポイントを理解しました。

Htmlentities() 適切な文字をすべて HTML エンティティに変換します

関数の説明:

string htmlentities ( string $string [, int $flags = ENT_COMPAT [, string $charset [, bool $double_encode = true ]]] )

string: 変換する文字を入力します。

flags: htmlspecialchars() と同様に、2 番目のパラメーターでは、一重引用符と二重引用符が何を行うかを定義できます。これは、デフォルト定数 ENT_COMPAT の 3 つのパラメーターの 1 つである必要があり、4 番目の ENT_IGNORE

ENT_IGNORE説明

ENT_COMPAT

と組み合わせることができます。二重引用符は変換され、一重引用符はそのままになります。

ENT_QUOTES

二重引用符と一重引用符の両方を変換します。

ENT_NOQUOTES

二重引用符と一重引用符は両方とも変換されません。

無効なコードユニットをサイレントに破棄しますPHP 5.3.0 で追加されました。これは下位互換性のために提供されています。セキュリティに影響を与える可能性があるため、使用しないでください。htmlspecialchars() と同様に、オプションの 3 番目の文字列が付属しています。現在、パラメータは文字セット変換として使用されます。

ISO-8859-1

ISO8859-1西ヨーロッパ、ラテン-1ISO-8859-15double_encode: double_encode が閉じた状態では、PHP はデフォルトですべてを HTML エンティティに変換します エンコードされた文字列を返します しかし、これらの文字セットがなかったらどうなるでしょうか?その場合、この機能は動作しなくなります。これは悲劇ではないので、それをフィルタリングする別の関数を自分で作成したほうがよいでしょう。 function inxss($url) { } } }

ISO8859-15

西ヨーロッパ、ラテン-9 。ユーロ記号が追加され、フランス語とフィンランド語の文字が Latin-1 (ISO-8859-1) にありません。

UTF-8

ASCII 互換のマルチバイト 8 ビット Unicode。

cp866

ibm866、866

DOS 固有のキリル文字エンコード。この文字セットはバージョン 4.3.2 でサポートされています。

cp1251

Windows-1251、win-1251、1251

Windows 固有のキリル文字エンコード。この文字セットはバージョン 4.3.2 でサポートされています。

cp1252

Windows-1252、1252

Windows 固有の西ヨーロッパ エンコーディング。

KOI8-R

koi8-ru、koi8r

ロシア語。この文字セットはバージョン 4.3.2 でサポートされています。

BIG5

950

繁体字中国語、主に中国の台湾省で使用されます。

GB2312

936

簡体字中国語、中国語の国家標準文字セット。

BIG5-HKSCS

香港拡張 Big5 文字セットを使用した繁体字中国語。

Shift_JIS

SJIS、932

日本語

EUC-JP

EUCJP

Japanese

戻り値

html_entity_decode() と htmlentities() は逆関数で、1 つはデコード用、もう 1 つはエンコード用です。

{

$arr = array('http','script','iframe','com','www');//川を渡る登場人物たち、ふふ、ご自由にそれらを使用してください。実際、http:// に渡されない限り、私のものは iframe 内のクロスサイトであるため、通常の処理を使用するのが最善です。 。 。これらの URL を入力するだけです

foreach($arr as $value)
if( strstr($url,$value))

{

exit;
else

{

return $url;
}

$url = htmlentities(inxss($_GET["url"]));二重フィルタリング。ふふ

これでもっと安全になるはず

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。