我认为这种说法易受注射,但我不确定。
在这方面有任何帮助吗?
感谢。
function CheckUserLogin($userName,$password)
{
$sql="SELECT user_id
FROM users
WHERE user_name='".addslashes($userName)."' AND password ='".addslashes($password)."'";
$this->query($sql);
if($this->movenext()>0)
{
return $this->col['user_id'];
}
else
{
return false;
}
}
查询功能就是这样
function query($_query){
list($usec, $sec) = explode(" ",microtime());
$time_start = ((float)$usec + (float)$sec);
$this->query = $_query;
$this->result = @mysql_query($_query, $this->link_id) or die("<b>error in sql query</b><br><pre>".$_query."</pre>.mysql error : <b>".mysql_error($this->link_id)."</b><p>");
list($usec, $sec) = explode(" ",microtime());
$time_end = ((float)$usec + (float)$sec);
$time = $time_end - $time_start;
}
答案 0 :(得分:1)
这就是docs on addslashes
所说的:
请注意,使用
addslashes()
进行数据库参数转义可能会导致大多数数据库出现安全问题。
同一篇文章:
为了逃避数据库参数,出于安全原因,应使用DBMS特定的转义函数(例如MySQL的
mysqli_real_escape_string()
或PostgreSQL的pg_escape_literal()
,pg_escape_string()
。
但是,在SQL语句中使用参数的最佳方法是使用prepared statements。在那里,参数值永远不会注入SQL语句,因此也不会有恶意注入。相反,数据库引擎直接使用参数值(以及作为文字)来执行已编译的查询。
请阅读How can I prevent SQL injection in PHP:它有很多关于此主题的信息。
答案 1 :(得分:0)