我學習PHP和我遇到的htmlspecialchars(),它是用來防止黑客攻擊,怎麼來的?我在谷歌上看過它,還不明白。請給我舉個例子嗎?使用用htmlspecialchars()的
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
Website : <input type="text" name="website"><br>
<input type="submit" value="Submit" name="button">
</form>
<?php
if($_SERVER["REQUEST_METHOD"] == "POST"){
$website = $_POST['website'];
echo "true";
if(empty($website)){
echo "empty";
}
else{
echo $website;
}
}
?>
當我輸入一個網址,這樣http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
輸出 http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
當我從 <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
刪除htmlspecialchars()
輸出是一樣的。爲什麼?有什麼用的htmlspecialchars()
然後?
和 然而,考慮到用戶輸入以下網址到地址欄:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
在這種情況下,上面的代碼將被轉換爲:(?如何以及在哪裏發生這種情況)
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
請儘量回答我的問題,而不是授予它的-1。 A 8小時的搜索後,我來到這裏是要問這個問題,所以請儘量澄清這對我:)。 –
你只是逃避PHP_SELF的行動= URL。然後瀏覽器在發送POST請求時將HTML實體解釋掉。 PHP接收原始值。然後你不會逃避'$ website'。 - 另外,是關於[上一個問題]的評論投訴(http://stackoverflow.com/questions/31207902/how-to-convert-to-lt-and-convert-to-gt-using-php)發佈幾分鐘前由一個*不同的用戶? – mario
可能的重複[你只在輸出上運行htmlspecialchars(),或者你還有其他功能嗎?](http://stackoverflow.com/q/526438),[使用htmlspecialchars()進行輸入/輸出HTML清理,對於MySQL數據庫糟糕的設計?(http://stackoverflow.com/q/14148937),[對所有輸出需要用htmlspecialchars()?](http://stackoverflow.com/q/17812833),[PHP& MySQL的:什麼時候究竟使用ヶ輛(http://stackoverflow.com/q/2077576) – mario