4.3 反射型XSS攻擊
??頁面http://127.0.0.1/xss/xss1.php實現的功能是在“輸入”表單中輸入內容,單擊“提交”按鈕后,將輸入的內容放到“輸出”表單中,例如當輸入“11”,單擊“提交”按鈕時,“11”將被輸出到“輸出”表單中,效果如圖68所示。

??當訪問http://127.0.0.1/xss/xss1.php?xss_input_value="><img src=1 onerror="alert(/xss/)"/>時,輸出到頁面的HTML代碼變?yōu)?lt;input type="text" value=""><img src=1 onerror="alert(/xss/)"/>">,可以看到,輸入的雙引號閉合了value屬性的雙引號,輸入的>閉合了input標簽的<,導致輸入的<img src =1 onerror="alert(/xss/)"/>變成了HTML標簽,如圖69所示。

??接下來,在瀏覽器顯然時,執(zhí)行了<img src =1 onerror="alert(/xss/)"/>,JS函數alert()導致瀏覽器彈窗,顯示“/xss/”,如圖70所示。

4.4 反射型XSS代碼分析
??在反射型XSS PHP代碼中,通過GET獲取參數xss_input_value的值,然后通過echo輸出一個input標簽,并將xss_input_value的值放入input標簽的value中。當訪問xss_input_value="><img src=1 onerror=alert(/xss/)/>時,輸出到頁面的HTML代碼變?yōu)?lt;input type="text" value=""><img src=1 onerror="alert(/xss/)"/>">,此段HTML代碼有兩個標簽,<input>標簽和<img>標簽,而<img>標簽的作用久石讓瀏覽器彈框顯示“/xss/”,代碼入下所示。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>XSS利用輸出的環(huán)境來構造代碼</title>
</head>
<body>
<center>
<h6>把我們輸入的字符串 輸出到input里的value屬性里</h6>
<form action="" method="get">
<h6>請輸入你想顯現的字符串</h6>
<input type="text" name="xss_input_value" value="輸入"><br />
<input type="submit">
</form>
<hr>
<?php
if (isset($_GET['xss_input_value']))
{
echo '<input type="text" value="'.$_GET['xss_input_value'].'">';
}
else
{
echo '<input type="text" value="輸出">';
}
?>
</center>
</body>
</html>