[英]Is FILTER_SANITIZE_STRING enough to avoid SQL injection and XSS attacks?
[英]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);
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.