2015-12-15 137 views
-1

我正在使用以下方法來避免xss攻擊。這是正確的方式來使用它嗎?如果不是,請告訴我正確的方法來避免攻擊。如何在PHP中避免SQL注入和XSS攻擊?

$first_name=strip_tags($_POST["txt_firstname"]); 

這對於避免XSS和

$fname=filter_var($first_name, FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/^[a-zA-Z ]+$/"))); 
if($fname===FALSE) 
{ 
    echo "error"; 
} 
else { 
echo "success;  
} 

這是好辦法?

+0

使用'htmlspecialchars()',這個函數轉義不想要的標籤 – Lino

+1

在google上必須有一個googol結果。 – Peter

回答

0

我建議你使用filter_input功能與sanitize filters之一刪除所有不想要的字符,如果這還不夠,你可以通過施加額外的過濾器像你filter_var做以及驗證輸入:

$first_name = filter_input(INPUT_POST, 'txt_firstname', 
    FILTER_SANITIZE_FULL_SPECIAL_CHARS); 
$email = filter_input(INPUT_POST, 'txt_email', 
    FILTER_SANITIZE_EMAIL); 

要防止SQL注入,請使用prepared statements。有關更多信息,請參閱herehere

1

strip_tags應該howevever去除所有標籤,您可以使用filter_var作爲替代,例如,以防止XSS攻擊

$first_name = filter_var($_POST["txt_firstname"], FILTER_SANITIZE_STRING);

爲防止SQL注入攻擊,你需要消毒POST:

例如:

$first_name = filter_var($_POST["txt_firstname"], FILTER_SANITIZE_STRING); 
$first_name = mysqli_real_escape_string(trim($first_name)); 
0

我建議你使用一個工具,如GUMP清理/過濾/清理輸入。

require "gump.class.php"; 
//remove the line above if you're going to use composer 

$gump = new GUMP(); 

$_POST = $gump->sanitize($_POST); 

您也可以添加自己的消毒過濾器來過濾他們,即使有,因爲這些工具的具體處理這些問題,在將來發現了一個新發現的攻擊向量,它很可能是固定的,你知道的,甚至之前他們。 (只要你經常更新你的工具)