我有一个关于mysql_real_escape_string的快速问题。我应该在哪里使用它?
我有一个* .php文件,其表单将其重定向到自身,但该文件正在使用另一个文件,其中包含函数Add(params);
在提交字符串时我应该逃避字符串吗?
$catName = mysql_real_escape_string($_POST['edtCatAddName']);
或者我应该在班上逃避字符串吗?
$catName = mysql_real_escape_string($catName);
或许这两种情况都是错误的,我还需要做点其他事情?我试图像我一样逃避我的查询
$query = mysql_real_escape_string("INSERT INTO cat (catName, catDescr, catImg, catSubLevel, catSubID) VALUES ('$catName', '$catDescr', '$catImgURL', $catSubLevel, $catSubID)");
但它不太好,因为这样我的查询就不会去,因为catName和其他一些变量是字符串类型,我需要在它们之前和之后添加'这些字符被转义。
有什么建议吗?我对此很新...
因此,如果我使用PDO,那么我所要做的就是
$STH = $DBH->prepare("my raw, not escaped query");
$STH->execute();
我能感到安全吗?
答案 0 :(得分:2)
无处,您应该使用PDO预备语句来保护您免受SQL注入。
答案 1 :(得分:1)
何时使用mysql_real_escape_string()
实际上,在清理用户的输入时使用mysql_real_escape_string()
。因此,您应该(至少)在任何地方使用它,用户可以输入任何进入查询的内容。我们还建议您使用Prepared Statements。
准备好的陈述
基本上它们是非常安全的SQL查询。 让我们举个例子。
SELECT UserName FROM user WHERE UserUID = X
是一个简单的查询。假设X
是来自$_GET
输入的变量。有些用户可以向X添加所有内容。即使是1;
,然后开始新的查询。这种技术称为SQL Injection。
现在使用mysql_real_escape_string()
解决了部分问题,而且非常安全。但Prepared语句告诉服务器
SELECT UserName FROM user WHERE UserUID =
类似于静态部分,然后X
是变量。通过这种方式,服务器有点准备来执行这样的查询,而不考虑X
中任何输入的输入。通过这种方式,您根本不必担心用户输入。
答案 2 :(得分:0)
你可以这样做:
$catName = mysql_real_escape_string($_POST['catName']);
或直接在查询中使用mysql_real_escape_string()
。
对于预期为数字的值(整数,浮点数) - 您可以使用intval($var)
表示整数,或floatval($var)
表示浮点数。
BUT:
永远不要将mysql_real_escape_string()
用于整个查询 - 这完全是错误的; - )
编辑:
我忘了提到:最好是使用PDO
(PHP数据对象) - > http://de.php.net/PDO
答案 3 :(得分:0)
别。使用mysqli或PDO在查询中使用参数。