我使用以下方法来避免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 :(得分: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。有关详情,请参阅here和here。
答案 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);
您还可以添加自己的清理过滤器来过滤它们,因为这些工具专门用于处理这些问题,将来即使找到新的攻击向量,它甚至可能在您了解它们之前就已修复。 (只要您经常更新工具)