Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在我的函数中防止XSS攻击?_Php_Sql Injection_Xss - Fatal编程技术网

Php 如何在我的函数中防止XSS攻击?

Php 如何在我的函数中防止XSS攻击?,php,sql-injection,xss,Php,Sql Injection,Xss,我正在为我的$\u POST输入创建一个函数,以在将值添加到数据库之前防止SQL注入。我在登录/注册以及用户需要发布文章时使用它。据我所知,这无法从XSS保护它 我应该在输出数据或编辑数据时创建不同的函数吗 多谢各位 function clean($str) { $str = @trim($str); if(get_magic_quotes_gpc()) { $str = stripslashes($str); } return mysql_rea

我正在为我的
$\u POST
输入创建一个函数,以在将值添加到数据库之前防止SQL注入。我在登录/注册以及用户需要发布文章时使用它。据我所知,这无法从XSS保护它

我应该在输出数据或编辑数据时创建不同的函数吗

多谢各位

function clean($str) {
    $str = @trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}

我使用以下方法,可以很好地防止注射:

function clean($str) {
    $value = mysql_escape_string(stripslashes(htmlspecialchars($str)));
    return $value;
}

我使用以下方法,可以很好地防止注射:

function clean($str) {
    $value = mysql_escape_string(stripslashes(htmlspecialchars($str)));
    return $value;
}

您先讨论XSS,然后讨论SQL注入

SQL 使用
mysql\u real\u escape\u string()
或更好地使用库(如PDO)绑定参数

如果可以使用
magic\u quotes
,请使用

function sqlEscape($str) {
   if (get_magic_quotes_gpc()) {
      $str = stripslashes($str);
   }
   return mysql_real_escape_string($str);
}
关于您的示例,为什么需要使用
trim()
来确保数据安全?另外,为什么要在
trim()
上使用错误抑制器

XSS
使用
htmlspecialchars($str,entu QUOTES)
来防止HTML特殊字符具有特殊意义。

您讨论的是XSS,然后是SQL注入

SQL 使用
mysql\u real\u escape\u string()
或更好地使用库(如PDO)绑定参数

如果可以使用
magic\u quotes
,请使用

function sqlEscape($str) {
   if (get_magic_quotes_gpc()) {
      $str = stripslashes($str);
   }
   return mysql_real_escape_string($str);
}
关于您的示例,为什么需要使用
trim()
来确保数据安全?另外,为什么要在
trim()
上使用错误抑制器

XSS
使用
htmlspecialchars($str,entu QUOTES)
防止HTML特殊字符具有特殊含义。

尝试使用准备好的语句。它们被设计成自动逃离事物。它们还应该使您的查询在源代码中更清晰


尝试使用准备好的语句。它们被设计成自动逃离事物。它们还应该使您的查询在源代码中更清晰


您不应该将值作为编码的HTML保存到数据库中。在输出它们时,而不是在保存它们时这样做(保存编码的HTML会使在其中搜索变得更困难,使它们的大小更大,使它们更难以HTML以外的格式使用,通常是错误的-您的数据库应该存储实际文本,而不是以特定方式显示的格式化文本)


此外,正如Quamis所说,您可能应该查看PDO或其他一些DBAL,它们允许您使用准备好的语句,而不是手动转义语句。

您不应该将值作为编码的HTML保存到数据库中。在输出它们时,而不是在保存它们时这样做(保存编码的HTML会使在其中搜索变得更困难,使它们的大小更大,使它们更难以HTML以外的格式使用,通常是错误的-您的数据库应该存储实际文本,而不是以特定方式显示的格式化文本)


此外,正如Quamis所说,您可能应该看看PDO或其他一些DBAL,它们允许您使用准备好的语句,而不是手动转义。

mysql\u real\u escape\u string在mysql db中存储时提供保护。不会删除html和js。striptags、advanced preg_replace pattern和/或htmlspecialchars应该会有所帮助。看看这个:输入时使用可怕的分号-
htmlspecialchars
,输出时使用
htmlspecialchars
,正确吗?为sql注入准备语句-
htmlspecialchars
输出,并使用类型检查…否。我个人更喜欢在打印时净化文本。在输入数据库时,使用mysql\u real\u escape\u字符串。在输出时,您可以使用htmlspecialchars或htmlspecialchars+striptags。您可以将它集中在一个类或函数中,这样您就可以轻松地更改或调整它。htmlentities转换更多实体。mysql\u real\u escape\u字符串用于在mysql数据库中存储时的保护。不会删除html和js。striptags、advanced preg_replace pattern和/或htmlspecialchars应该会有所帮助。看看这个:输入时使用可怕的分号-
htmlspecialchars
,输出时使用
htmlspecialchars
,正确吗?为sql注入准备语句-
htmlspecialchars
输出,并使用类型检查…否。我个人更喜欢在打印时净化文本。在输入数据库时,使用mysql\u real\u escape\u字符串。在输出时,您可以使用htmlspecialchars或htmlspecialchars+striptags。您可以将它集中在一个类或函数中,这样您就可以轻松地更改或调整它。htmlentities转换更多实体。感谢您的帮助。。。你为什么离开魔术师学院?就像他们说的那样没有必要吗?magic_quotes正在慢慢消亡,并且从5.3开始就被弃用了。我个人在编码时不再考虑它们(但是我也不使用共享主机,所以我完全控制了配置)。我会在
.htaccess
中设置一个
php\u标志来禁用它。您这样做的唯一原因是支持与PHP共享主机。谢谢您。。。你为什么离开魔术师学院?就像他们说的那样没有必要吗?magic_quotes正在慢慢消亡,并且从5.3开始就被弃用了。我个人在编码时不再考虑它们(但是我也不使用共享主机,所以我完全控制了配置)。我会在
.htaccess
中设置一个
php\u标志来禁用它。采用这种方式的唯一原因是支持使用PHP的共享托管严格来说,它们实际上不会转义字符串,因为它们实际上不会使用它们构建原始SQL查询。带有占位符的查询将按原样发送到数据库,值将单独发送。有了准备好的陈述,就没有必要逃避任何事情。是的,你是对的。我正在使用和,对于不支持的数据库和驱动程序,它试图自己进行转义。。。从程序员的角度来看,最终结果基本相同严格地说,它们实际上并没有转义字符串,因为它们实际上并没有用它们构建原始SQL查询。带有占位符的查询将按原样发送到数据库,值将单独发送。W