用于防止SQL注入和XSS的PHP函数

Lon*_*ler 14 php mysql xss sql-injection

我想让我的PHP尽可能安全,我想避免的两个主要问题是

  • mySQL注射
  • 跨边脚本(XSS)

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

function make_safe($variable) {
$variable = mysql_real_escape_string(trim($variable)); 
return $variable;  }
Run Code Online (Sandbox Code Playgroud)

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


针对XSS,我发现了这个:

$username = strip_tags($_POST['username']);
Run Code Online (Sandbox Code Playgroud)

现在我想把两者合二为一个函数.这是最好的方法吗?:

function make_safe($variable) {
$variable = strip_tags(mysql_real_escape_string(trim($variable)));
return $variable; }
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*ica 13

这个功能:

function make_safe($variable) 
{
   $variable = strip_tags(mysql_real_escape_string(trim($variable)));
   return $variable; 
}
Run Code Online (Sandbox Code Playgroud)

不管用

SQL注入和XSS是两种不同的野兽.因为他们需要不同的逃避,你需要使用的每个逃生功能strip_tagsmysql_real_escape_stringseparatly.
加入他们会破坏每个人的安全.

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

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

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

因此,通过将格式错误的html输入到数据库字段中,智能攻击者可以使用您的天真实现来击败mysql_real_escape_string()您的组合.


daG*_*vis 11

mysql_real_escape_string()不会阻止XSS.只能进行SQL注入是不可能的.

要对抗XSS,您需要使用htmlspecialchars()strip_tags().1st将转换<&lt;将显示为的特殊字符<,但不会执行.第二个只是删除所有标签.

我不建议使用特殊功能来执行此操作,甚至不要使用一个功能来完成所有操作,但您的示例可以正常工作.我假设.

  • 值得一提的是 `mysql_real_escape_string()` 已被弃用,并已被 `mysqli_real_escape_string()` 取代。 (2认同)