繁体   English   中英

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

[英]How to avoid SQL injection and XSS attacks when in PHP?

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

这是好方法吗?

我建议您将filter_input函数与其中一个清理过滤器一起使用,以删除所有不需要的字符,如果这样做还不够,您可以像应用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注入,请使用准备好的语句 看到这里这里了解更多。

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));

我建议您使用GUMP之类的工具来清洁/过滤/消毒输入。

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

$gump = new GUMP();

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

您也可以添加自己的清理过滤器以对其进行过滤,并且由于这些工具专用于处理这些问题,因此即使将来找到新的攻击媒介,也可能在您不了解它们的情况下对其进行修复。 (只要您经常更新工具)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM