2012-07-24 229 views
1

请看看下面的代码:我们在使用会话时是否必须使用mysql_real_escape_string()?

$username = $_POST['username']; 
$_SESSION['user_name'] = $username; 

我一定要使用mysql_real_escape_string()功能,而我设置$username值吗?如果我不这样做,是否有任何威胁?

注意:我使用PDO,而我想使用MySQL。

+3

不需要它。 – 2012-07-24 07:30:16

+0

如果您使用PDO,则可以使用prepare,而不需要在执行查询时转义变量。 – 2012-07-24 07:33:48

回答

5

不,你不需要以任何方式逃避它。如果您将文本与其他文本连接起来,并且某些字符可能具有特殊含义,则只需要转义文本。见The Great Escapism (Or: What You Need To Know To Work With Text Within Text)

+0

你同意@asprin吗?在会话中使用SQL语句可能会损害应用程序?即使在会话中存储值时,过滤所有SQL也不是更好吗? – 2012-07-24 07:39:11

+0

@MohammadSaberi会话中没有SQL语句;不在您发布的代码中。而且,“会话中的SQL语句会损害应用程序”是无稽之谈 - 会话和SQL是完全无关的。 – Piskvor 2012-07-24 07:42:02

+2

@Moh在必要之前不要逃避数据!是的,您可能在那里有数据,如果在SQL查询中被天真地使用,会导致SQL注入。但这并不意味着你必须在将它存储在会话中时逃脱它,因为它不会在那里造成伤害。必要时逃脱,不迟于。如果您使用PDO准备的语句,则根本无需转义。 – deceze 2012-07-24 07:42:03

4

您不需要,只有当您想要将字符输入到数据库时才使用它。

3

Mysql_real_escape_string()用于安全目的,因此用户无法执行SQL注入。如果您没有使用$_SESSION['user_name']$username作为数据库,那么您将不需要使用它。您可以在这里阅读更多 - http://php.net/manual/en/function.mysql-real-escape-string.php

mysql_real_escpae_string()向每个特殊字符添加反斜杠。

另外,您应该检查一些SQL注入示例,以便了解它是如何完成的,以及mysql_real_escape_string()正在阻止的内容 - http://www.unixwiz.net/techtips/sql-injection.html

0

您不应该因为只能在服务器上操作会话数据。

如果你知道你有数据在那里是用于查询和字符需要转义,那么显然你应该确保发生。

您存储在包含任何qry语言(如'OR 1 = 1')的会话中的任何值基本上都归结为糟糕的应用程序设计IMO - 会话中的任何值都可能会导致安全失误,这是您自己的错误 - 确定它不能完成。

+0

咦?将用户提供的数据存储在会话中是非常常见的事情,如果在查询或其他地方使用时需要进行转义......?! – deceze 2012-07-24 07:36:47

相关问题