首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我还应该用mysqli清理输入吗?

我还应该用mysqli清理输入吗?
EN

Stack Overflow用户
提问于 2011-03-09 08:23:27
回答 5查看 7K关注 0票数 4

我使用的是mysqli预准备语句。我是否应该仍然使用如下函数来清理用户输入:

代码语言:javascript
运行
复制
function sanitise($string){
  $string = strip_tags($string); // Remove HTML
  $string = htmlspecialchars($string); // Convert characters
  $string = trim(rtrim(ltrim($string))); // Remove spaces
  $string = mysql_real_escape_string($string); // Prevent SQL Injection
  return $string;
}

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-09 08:27:49

不是的!不是也不是。如果您已经在使用预准备语句,MySQL需要查看该值,而不是它的某个转义版本。如果您将mysql_real_escape_string添加到一个字符串中,并将该设置为预准备语句的值,那么您就丢弃了它,例如,引号被加倍了!

现在,至于清理数据,这完全取决于业务规则,即什么是有效输入,什么是无效输入。在您的示例中,strip_tags更多地是关于html->raw (格式)转换,而不是卫生设施。rtrim(ltrim也是如此--这是一次业务转型。

票数 9
EN

Stack Overflow用户

发布于 2011-03-09 08:25:56

是的。当你使用预准备语句时,你是安全的,不会被mysql注入,但是仍然可能有特殊的字符,带标签或者空格,所以你仍然需要注意这些。

请参阅PHP: Is mysql_real_escape_string sufficient for cleaning user input?

更新:

您可以安全地避免mysql注入,所以您不应该使用real_mysql_scape_string或任何引号。

票数 2
EN

Stack Overflow用户

发布于 2011-03-09 08:26:24

准备好的语句是为了防止您的查询表单被恶意输入破坏。但是有大量的恶意内容在SQL查询中是完全可以接受的,但在稍后重新显示时会攻击浏览器。

对进入预准备语句的数据执行mysql_real_escape_string通常是多余的(也有例外,但它们是特殊情况)。

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

https://stackoverflow.com/questions/5240014

复制
相关文章

相似问题

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