2012-11-12 45 views
4

可能重複:
What are the best practices for avoiding xss attacks in a PHP site
What are the common defenses against XSS?我應該在所有輸出上使用htmlentities()嗎? (防止跨站腳本攻擊)

我試圖讓我寫安全PHP應用程序,並有一個關於轉義輸出的問題。一旦我知道這樣做會阻止SQL注入,我轉而使用PDO準備好的語句,並且似乎另一種主要類型的攻擊是XSS。我建立這樣的輸出爲我的網頁(假設變量,他們擁有數據庫中的數據):

$output = ''; 

$output .= ' 
<div style="float: left; width: 800px;"> 
    <span>Name:</span><span> ' . $name . '</span> 
    <span>Address:</span><span>' . $addr . '</span> 
    <span>Time:</span><span>' . time() . '</span> 
</div>'; 

$output .='[lots more html]'; 

所以,我的問題是,我應該使用htmlentities()各地從數據庫中輸出的每一塊數據(一個典型的頁面有幾十個,可能有數百個來自數據庫的變量被輸出)?

+2

使用'http:// htmlpurifier.org /' – GBD

回答

3

有兩個好處使用htmlentities()

  • XSS預防
  • 轉換特殊字符,以正確的HTML實體,例如,它的版權字符轉換爲&copy;。在HTML內容中,您應該使用適當的HTML實體,而不是插入原始特殊字符。

對於XSS預防,您可以使用htmlspecialchars()來代替,但它只會將一些基本字符轉換爲HTML實體,即引號,和號和小於/大於字符。

在回答你的問題時,輸出任何可能包含用戶輸入或特殊字符的內容時,應使用htmlentities()

1

htmlspecialchars()是綽綽有餘。 htmlentities用於不同的用途,不妨礙XSS。