在PHP中如何避免SQL注入和XSS攻击?

时间:2015-12-15 07:38:49

标签: php sql xss

我使用以下方法来避免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;    
}

这是好方法吗?

3 个答案:

答案 0 :(得分:1)

我建议您使用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 :(得分:1)

strip_tags应删除所有标记,例如,您可以使用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));

答案 2 :(得分:1)

我建议您使用像GUMP这样的工具来清理/过滤/清理输入。

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

$gump = new GUMP();

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

您还可以添加自己的清理过滤器来过滤它们,因为这些工具专门用于处理这些问题,将来即使找到新的攻击向量,它甚至可能在您了解它们之前就已修复。 (只要您经常更新工具)