XSS 、すなわち(クロスサイトスクリプティング)、クロスサイトスクリプティング攻撃
XSSの脆弱性の種類:
反射(非永続):主にURLパラメータに悪質なコードを使用し、クライアントがクッキー情報やフィッシングを盗むために使用されます。
ストレージタイプ(耐久性):攻撃者は、悪意のあるコードのWebサーバーへと限り対応するページへのクライアントアクセスが攻撃されるように、保存されました。
DOMタイプ:DOMを実行しないように、ブラウザをブラウザを使用していますが、直接ローカルにローカルな情報を変更したり、盗むために要求することもできます。
今、私たちは、XSSの反射演習に始めます
低いです
出典:
キーがfalseを返すが存在しない場合、キー名は、存在する場合、指定されたキーが配列の名前に存在するかどうかarray_key_exists()関数のチェックは、真を返します。ここでは、キーの名前の名前
あなたは非常に明白なXSSの脆弱性が存在し、空でない場合は、直接それをプリントアウトし、ちょうどnameパラメータが空であるかどうかを判断するために、低レベルのコードを見ることができ、およびnameパラメータの任意のフィルタリングと検査をしませんでした
私たちは、<SCRIPT>警告( 'ハック')</スクリプト>を入力して、直接私たちのjsのコードが実行しました
中
出典:
ここでは、str_replace()関数のみ「の<script>」フィルタを行うには、(それは大文字と小文字が区別されるので、str_replace()関数は、完璧ではありません)
しかし、二重の書き込みは、首都はまだ、書くことができます
私たちは、直接資本バイパスすることができます
私たちは、私たちが直接jsのコードを実行し、<SCRIPT>警告( 'ハック')</ SCRIPT>を入力してください
今バイパスを倍増
フィルタリングコード:
= str_replace名$( '<SCRIPT>'、 ''、$ _GET [ '名前'])、傍受濾過<スクリプト>。
1、あなたの名前の入力ボックスには、何ですか?:<SCRIPT>警告(123)</スクリプト>
提出されたら、ブラウザを有効にするには、ここでstr_replace()関数を示し、直接アップ名が示すように「警告(123)」に、逆に、我々は期待ポップアップ表示警告内容をポップしません。
2、あなたの入力は何の入力ボックスに攻撃、名以下試してください?:
<Scの<スクリプト> RIPT>警告( "あなたが見ることができれば、攻撃が成功を示す")</スクリプト>
原理:ここでは、str_replace()関数のみ「の<script>」フィルタを行うには、
高い
出典:
任意の文字、大文字と小文字を区別しないIの代表の一つ以上を表し、直接フィルタに正規表現<* S * C * R * I * P *トンにハイレベルのコードの使用を認められ、かつ*することができます。したがって、私たちの<script>タグは、ここで使用することはできません。
しかし、我々はできる経由JS SRC IMG、身体や他のイベントやiframeタグや他のラベルの悪質なコードを挿入します。
不可能な
出典:
htmlspecialchars(文字列):事前に定義された文字「<」(より小さい)、「>」(より大きい)、&、「」、「」はHTML要素としてブラウザを防止する、HTMLエンティティに変換され、
私たちは、<SCRIPT>警告( 'ハック')</スクリプト>を入力した場合など、はhtmlspecialchars機能は、HTMLエンティティに変換し、$ {name}を取られますので、<PRE>で囲まれた値<と> $名、そしてあります我々はステートメント実行されませんを挿入して</ PRE>タグは、プリントアウトされます。
図から分かるように、不可能なレベルのコードは、名前が空、空でない単語であるかどうかを決定し、次いで、CSRF攻撃を防ぐために、そのトークンを検証します。その後はhtmlspecialcharsは、このように私たちがラベルに記入防止、HTMLエンティティに事前に定義された文字の名前を変換する機能を使用