2012-03-16 48 views
2

我完全困惑,我读了几篇文章,但仍然不确定。由于本网站仅在我们的内部网上,因此我不想执行准备好的语句路由。我已阅读以下帖子,但仍然不确定。什么时候使用mysql真正的转义字符串

  1. When to use mysql_real_escape_string?
  2. When to use mysql_real_escape_string()

我的问题:我应该用mysql真实逃逸字符串

  1. 当只有我从一个窗体或用户输入
  2. 在我的所有疑问?例如:SELECT * FROM ......

例如在this post它指出:You need to call this function when building SQL queries with string literals. You should not call it anywhere else.

+0

这应该是对帖子的评论。 – 2012-03-16 12:22:27

+0

可能的重复[何时使用mysql_real_escape_string?](http://stackoverflow.com/questions/5278043/when-to-use-mysql-real-escape-string) – 2012-03-16 12:22:37

+2

使用预准备语句实际上并不困难或更多时间 - 比使用“旧”方法耗费时间,通常情况恰恰相反。 – JJJ 2012-03-16 12:22:51

回答

2

什么准备语句做(除其他事项外)是调用类似的方法mysql_real_escape_string()
If你不使用PDO,什么是好的,你必须明白你在做什么,你会得到相同的安全级别。
唯一的和简单的规则就是all raw data needs mysql_real_escape_string()(或其他语言的类似)
的例子是:
- 数据从用户输入
- 您已存储RAW上DB(女巫是最好的方式),并且您的数据使用在新的SQL statment
- 从不明/其他来源的数据
的detalis是:
- 一定要不适两次(正确地保存数据)

+0

@你的常识为什么这个答案错了​​? – 2012-03-16 13:25:16

+1

如果我向您展示简单的代码,尽管遵循您的答案说明,将允许注射,您会删除它吗? – 2012-03-16 13:31:55

+3

一个非常误导的答案。 mysql_real_escape如何提供比pdo更多的安全性? pdo的概念是sql和data分开发送。人们应该尝试鼓励使用pdo的新手......像这样的一种方法是所有php教程,书籍都包含易受攻击代码的原因。 – itachi 2012-03-16 13:35:58

1

,当你不知道肯定发生了什么包含在字符串中做到这一点是非常重要的。 这意味着用户输入。

您可能还想考虑移动到PDO准备好的语句。

2

嗯,我实际使用它:

任何变量,我要投入到MySQL查询并可能已被用户修改,或者如果它是用户直接输入(通过表单),或参数,我一直在身边掠过通过GET requests

你明白我的意思... :-)

+1

...并弄错了 – 2012-03-16 12:25:13

+0

你能详细说明一下吗? – 2012-03-16 12:26:10

+0

试着想一下这个功能实际上做了什么,以及为什么 – 2012-03-16 12:29:48

0

你应该对你插任何变量使用在一个SQL查询中。

所有不是字面字符串的都应该进行消毒。不管你是从表单,数据库还是其他任何东西获取它,如果它不是恒定的,那么你应该清理它。

-2

你问题中引用的句子是真的。
所有其他答案都是错误的。

每当您要将带引号的字符串添加到SQL查询中时,都必须始终将其转义。
这是你必须使用mysql_real_escape_string()的唯一情况。

PS。我不能相信这个问题在所有答案中依然存在。

Stackoverflow是一个非常奇怪的地方。

+0

好吧,如果我理解corect:1)从用户表单输入=是。 2)选择*从usrs WHERE用户名='$ user'=不需要,因为我已经逃过了用户输入。 3).. while($ row = mysql_fetch_assoc($ result)){$ userid = $ row ['id']; $ DepartmentID的= $行[ '部门']; } =没有必要,因为它是来自表格的信息? 4)$ str =“耐克的....”=是 – Wilest 2012-03-16 13:17:54

+0

在我的答案中没有词语“输入”或“用户”。所以,你明白错了。 – 2012-03-16 13:20:23

+0

好吧,只有$ str =“Nike's ....”=是吗? – Wilest 2012-03-16 13:23:07

相关问题