防止 SQL 注入和 XSS 的 PHP 函数

2022-08-30 23:15:39

我正在努力使我的PHP尽可能安全,我试图避免的两个主要事情是

  • mySQL Injections
  • 跨端脚本 (XSS)

这是我针对mySQL注入获得的脚本:

function make_safe($variable) {
$variable = mysql_real_escape_string(trim($variable)); 
return $variable;  }

http://www.addedbytes.com/writing-secure-php/writing-secure-php-1/


针对XSS,我发现了这个:

$username = strip_tags($_POST['username']);

现在我想将两者合并为一个函数。这是最好的方法吗?:

function make_safe($variable) {
$variable = strip_tags(mysql_real_escape_string(trim($variable)));
return $variable; }

还是mysql_real_escape_string已经阻止了XSS?最后,我还可以添加到此功能中以防止其他形式的黑客攻击吗?


答案 1

mysql_real_escape_string() 不会阻止 XSS。它只会使SQL注入变得不可能。

要对抗XSS,你需要使用htmlspecialchars()strip_tags()。1st会将特殊字符转换为,将显示为,但不会被执行。第二,只是剥离所有标签。<&lt;<

我不建议使用特殊功能来完成它,甚至不建议使用一个函数来完成所有操作,但是您给出的示例会起作用。我假设。


答案 2

此函数:

function make_safe($variable) 
{
   $variable = strip_tags(mysql_real_escape_string(trim($variable)));
   return $variable; 
}

将不起作用

SQL注入和XSS是两个不同的野兽。由于它们每个都需要不同的转义,因此您需要单独使用每个转义函数。
加入他们的行列将破坏每个人的安全。strip_tagsmysql_real_escape_string

将数据输入数据库时使用标准。
在将内容输出到屏幕之前从数据库中查询内容时使用。mysql_real_escape_string()strip_tags()

为什么将两者功能结合起来是危险的
从马口:http://php.net/manual/en/function.strip-tags.php

由于strip_tags() 实际上并未验证 HTML,因此部分或损坏的标记可能会导致删除的文本/数据比预期的多。

因此,通过将格式错误的html输入到数据库字段中,聪明的攻击者可以使用您幼稚的实现在您的组合中击败它。mysql_real_escape_string()


推荐