这是使用mysql_real_escape_string
的正确方法吗?我正在使用$GET
但有一位朋友告诉我用real_escape_string让它更安全:
$id = intval($_GET['id']);
$result = mysql_query("SELECT *
FROM products
WHERE id = $id") or die("err0r");
if(!$result) mysql_real_escape_string($id); {
答案 0 :(得分:6)
不,您通常使用mysql_real_escape_string
来准备要在查询中使用的变量,但在您的情况下:
intval
; 您的示例中不需要它。
答案 1 :(得分:2)
没有。这是完全错误的,我不太明白你打算做什么。
mysql_real_escape_string
的目的是避免SQL injection,这是网站中最大的安全风险之一。它会阻止用户提供以恶意方式操纵SQL的输入。例如:
$sql = "SELECT FROM users WHERE username = '" . $_GET['username'] . "'";
如果我将lonesomeday' or 'a' = 'a
放入$_GET['username']
,您的查询将变为
SELECT FROM users WHERE username = 'lonesomeday' or 'a' = 'a'
然后显然可以执行任意SQL。 mysql_real_escape_string
转义不安全的字符(例如该示例中的'
),因此无法以这种方式使用它们。
$sql = "SELECT FROM users WHERE username = '" . mysql_real_escape_string($_GET['username']) . "'";
// SELECT FROM users WHERE username = 'lonesomeday\' or \'a\' = \'a'
报价现已转义。所以查询不能被操纵成做恶事。
尽管如此,在这种情况下,intval
可以满足您的所有需求。它还确保不是整数的任何东西都可以在$id
中,因此您的代码在SQL注入时是安全的。
答案 2 :(得分:1)
不,你需要在离场前逃跑
$id = intval($_GET['id']);
$result = mysql_query("SELECT *
FROM products
WHERE id = '" . mysql_real_escape_string($id) . "'") or die("err0r");
if(!$result) {
}
答案 3 :(得分:1)
使用:
$query = sprintf("SELECT *
FROM products
WHERE id = %d",
intval($_GET['id']));
$result = mysql_query($query) or die("err0r");
您在 之前使用mysql_real_escape_string
在查询中使用该值,否则您将无法处理SQL注入攻击。
答案 4 :(得分:1)
你想在将它贴在查询中之前将其转义(在它与数据库交互之前你不进行注射)。
// check if your $_GET is not empty otherwise you
// will run into "undefined variable"
if(!empty($_GET['id'])){
$id = intval($_GET['id']);
// to simplify you can escape here,
// or to be a bit more complex, you can escape in the query line.
$id = mysql_real_escape_string($id);
$result = mysql_query("SELECT *
FROM products
WHERE id = '$id'") or die("err0r");
}
else
print 'No ID';