2013-08-28 31 views
0

哪種防止XSS攻擊更好?這是我正在嘗試的代碼。防止XSS更好的方法是什麼?

這行代碼是否足以防止XSS攻擊?或者我是否必須使用'strip_tags'來解析每個元素。謝謝你的任何建議。

$xss = array_map('strip_tags', $_POST); 

OR

在該方法我不得不改變很多形式的元素與 '用strip_tags'。

$f_name = strip_tags($_POST["f-name"]); 
$a_id = isset($_POST['a_id']) ? (int)strip_tags($secure_POST['a_id']) : 0; 

$qry = $pdo_conn->prepare('INSERT INTO TABLE1(id, f_name) VALUES (?, ?)'); 
$qry->execute(array($a_id, $f_name)); 
+0

都不要使用[PDOStatement :: bindParam](http://php.net/pdostatement.bindparam)來強制參數綁定到特定的數據類型,並節省大量strip_tags和鑄造。 – cmbuckley

+2

花一天時間閱讀關於XSS的內容,以便了解它實際* *的含義。 –

回答

2

XSS表示Cross Site Scripting並且正在注入一個帶有惡意html元素的網站。這可以通過在顯示時設置適當的字符集(如utf8)和htmlentities來防止。

你想保留原始數據在你的數據庫,以防萬一。如果你想改變反XSS策略,你可以一次完成,因爲數據還沒有準備好。

我想你的意思是反sql-injection。準備好的語句自己做(如果定義了正確的字符集像utf8),不需要擔心。 雖然你可以事先做一些檢查,比如檢查$ _POST ['int']是否只有int值(例如)。

+0

我在我的html頁面中使用了以下標籤。 。此外,PHP.ini文件中的默認字符集是utf-8。 – nav100

+0

你也可以爲你的連接設置一個字符集,只是爲了確保:) – Martijn

1

防止XSS的最佳做法是在輸出過程中對數據進行編碼和消毒,因爲在打印數據時出現XSS,然後請參閱OWASP - XSS (Cross Site Scripting) Prevention Cheat Sheet以獲取更多信息。

使用準備好的語句(參數化)可以防止SQL注入攻擊而不是XSS,因此,如果允許用戶輸入數據,則必須考慮這兩種攻擊,因爲用戶數據應始終被視爲不可信。