首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysqli_real_escape_string澄清:存储在数据库中

Mysqli_real_escape_string澄清:存储在数据库中
EN

Stack Overflow用户
提问于 2012-05-02 10:20:40
回答 3查看 441关注 0票数 1

为了避免SQL注入攻击,我希望在将网站用户输入的所有文本(和大多数其他数据)发送到数据库存储之前,将其清理干净。

我的印象是,该函数在所有可能是恶意的字符( \n、‘、“等)之前插入反斜杠(\ ),并预期返回的字符串将包含新添加的反斜杠。

我对一个包含此类潜在恶意字符的虚构字符串执行了一个简单的测试,并将其回显到文档中,看到的正是我所期望的:使用反斜杠转义这些字符的字符串。

因此,在将数据存储到数据库之前,我继续向数据添加清理函数。我将它(mysqli_real_escape_string( $link,$string))插入到为存储数据而构建的查询中。在测试脚本时,我惊讶地注意到存储在数据库中的数据似乎不包含反斜杠。我一次又一次地测试,但都无济于事,我不知所措...

有什么建议吗?我是不是遗漏了什么?我希望然后必须使用stripslashes($string)函数删除反斜杠,但似乎没有任何东西可以剥离……

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-02 10:35:46

在使用mysql_real_escape_string()对数据进行转义后,在成功插入后查看数据库中的数据时,您将不会在数据库中看到反斜杠。这是因为只有在SQL查询语句中才需要转义反斜杠。对于insert (或update,或其他查询输入),mysql_real_escape_string()会对其进行清理,但在存储数据时不会产生永久修改的数据版本。

通常,您不希望在数据库中存储经过修改或清理的数据,而应将数据存储在其原始版本中。例如,最佳实践是存储完整的超文本标记语言字符串,而不是存储用PHP的htmlspecialchars()编码的超文本标记语言。

当您从数据库中检索它时,不需要stripslashes()或其他类似的取消转义。PHP有一些遗留的(错误的)功能,比如magic_quotes_gpc,它被设计为通过自动添加反斜杠到带引号的字符串来保护程序员,要求在输出时使用` `stripslashes(),但这些功能已经被弃用,现在大部分都被删除了。

票数 1
EN

Stack Overflow用户

发布于 2012-05-02 10:38:01

MySQL存储不带斜杠的数据(尽管它是带斜杠传递给关系数据库的)。所以以后不需要使用stripslashes()。

您可以确定字符串已转义,否则查询将失败。

票数 1
EN

Stack Overflow用户

发布于 2012-05-02 15:01:11

我希望清理我网站用户输入的所有文本(和大多数其他数据

这就是你做错了的地方。

  1. mysqli_real_escape_string不会“净化”任何东西。它的名称中没有“清理”一词。
  2. 你应该格式化,而不是“清理”你的数据。而不同的数据需要不同的formatting.
  3. You来格式化所有的数据,而不仅仅是我的网站用户输入的数据

在当前的表单中,您的站点极易受到攻击和错误。

I的印象是,该函数在所有可能是恶意的字符( \n,‘,“等)之前插入反斜杠(\ ),

为了让你知道,在任何角色中都没有恶意。有些服务字符在某些情况下可能会被误解。

但是添加反斜杠并不能让你的数据自动“安全”。有些注入不需要任何特殊字符。因此,您需要正确地格式化您的数据,而不仅仅是使用某种魔术来使您变得非常安全

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10406895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档