【问题标题】:Do i have to change all my htmlspecialchars ... ENT_QUOTES in mysql_real_escape_string?我是否必须更改我所有的 htmlspecialchars ... mysql_real_escape_string 中的 ENT_QUOTES?
【发布时间】:2012-07-31 18:56:46
【问题描述】:

我想保护我的网站免受 sql 注入和其他可能的风险,所以我通过为每个变量添加如下内容来更改我的所有 sql 查询:

 $getLid = htmlspecialchars($_GET[lid], ENT_QUOTES);

对于我的 50 个文件...但我刚刚看到这可能是我的错误:我应该为任何“输入”添加 mysql_real_escape_string...

在这种情况下使用mysql_real_escape_string 还是更好,还是ENT_QUOTES 也可以使用?我是否必须再次重新启动并添加mysql_real_escape_string 而不是我的htmlspecialchars(..., ENT_QUOTES);

编辑:

你是这个意思吗?

$getLid = escape_string($str);

function escape_string($str){
    return mysql_real_escape_string($str);
}

编辑n°2:return语句不能正常工作,你知道为什么吗?

警告:mysql_real_escape_string() [function.mysql-real-escape-string]:无法在 ... www/escape_file.php 中建立到服务器的链接

访问被拒绝... www/escape_file.php 中的用户

谢谢

【问题讨论】:

  • 您的第一个错误是使用ext/mysql. 阅读“如何使我的数据库查询免受 SQL 注入攻击?”在stackoverflow.com/tags/php/info.
  • @alexn :谢谢,关于我的问题还有其他想法吗?

标签: php quotes mysql-real-escape-string htmlspecialchars


【解决方案1】:

有很多关于安全用户输入的参考。你可以谷歌它,但我认为你应该在另一个 php 文件(如“escape.php”)中编写一个类或一个函数,然后将该文件包含到所有 50 个文件中。然后用它来逃避。例子:

include 'escape.php';
$str = escape_string($str);

因此,您只需更改单个文件即可轻松更改转义功能。 希望对你有帮助。

【讨论】:

  • 谢谢你的意思是像我编辑的那样吗? (我上面的帖子)
  • 是的。但是您应该将此代码写入另一个文件并包含它。那么您可以通过仅更改一个文件来更改所有文件。
  • 啊...谢谢,好的,ENT_QUOTES 不能以某种方式替换 escape_string?如果我别无选择,我将替换我所有的文件...
  • 它们用于完全不同的事情。 htmlspecialchars() 将特殊的 HTML 字符转换为实体,以便它们可以毫无问题地输出(或 XSS 风险),而 mysql_real_escape_string() 转义敏感的 SQL 字符,因此可以执行插值查询而没有 SQL 注入的风险。 Htmlspecialchars Or Mysql_real_escape_string
  • 注意mysql必须是一个有效的、开放的连接。这是必需的,因为转义取决于服务器使用的字符集。看看这个链接:mysql_real_escape_string - A MySQL connection is required before using mysql_real_escape_string
猜你喜欢
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多