准备好的语句是否完全保护我的网站免受MySQL注入?

spa*_*mud 3 php sql mysqli code-injection prepared-statement

我正在使用预处理语句和MySQLi查询以防止注入攻击.准备好的语句是否完全不需要mysql_real_escape_string?在保护我的网站时还有什么我应该考虑的吗?

Gal*_*len 5

只要您正确使用准备好的陈述,他们就会.您必须确保绑定所有外部变量,而不是直接将它们放在查询中.

例如

$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=" . $name);
Run Code Online (Sandbox Code Playgroud)

这个语句正在准备中,但它没有使用其中一种绑定方法,所以它没有用.它仍然容易受到SQL注入攻击.

要解决这个问题,请确保绑定所有内容......

$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
$stmt->bind_param("s", $city);
Run Code Online (Sandbox Code Playgroud)