我刚从头开始编写自己的php注册脚本,因为我是新手,我想问一下我使用的方法是否可以安全地进行sql注入?
这是我与sql数据库交换数据的一个例子:
public function StoreUser($name, $email, $password, $devid) {
$mysqli = new mysqli("host", "user", "pass", "data");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$unique_id = uniqid('', true);
$hash = $this->hashSSHA($password);
$add_user = $mysqli->prepare("INSERT INTO `users` SET `unique_id`=?, `name`=?, `email`=?, `encrypted_password`=?, `salt`=?, `devid`=?, `created_at`=?");
$add_user->bind_param("sssssss",$unique_id,$name,$email,$hash["encrypted"],$hash["salt"],$devid,date("H:i:s"));
if ($add_user->execute()) {
$add_user->close();
$mysqli->close();
return true;
}
else {
$add_user->close();
$mysqli->close();
return false;
}
}
答案 0 :(得分:5)
是的,这是安全的。
您正在使用参数化查询,从根本上将数据与命令分开,使您免受一阶SQL注入攻击。
答案 1 :(得分:2)
使用proper SQL placeholders是确保您的应用程序安全的重要的第一步。在这种情况下,您不必担心任何SQL注入错误,如果您对使用任何和所有用户的占位符进行管理,则应该为您进行转义 - 提供数据,但可能还有其他问题。
请记住,正如您为SQL语句转义一样,在将其显示为HTML之前,您也应该努力逃避用户提供的数据,否则您最终会遇到各种问题,其中最糟糕的是{{3 }}
在任何情况下,XSS都可以更轻松地进行转义。 mysqli
通常仅在PDO不可用时使用。
没有单一的魔术弹,但是你可以采取一些措施来防止你的应用被滥用,或者只是遭受尴尬的错误。但是,如果您正在编写自己的低级数据库接口代码而不是使用框架,那么这很难做到。你会花很多时间重新发明轮子。