Sas*_*234 5 php mysqli sql-injection
我知道该mysqli_real_escape_string功能可用于防止SQL注入。(但是,mysql_real_escape_string()不能保护您免受某些注入)
我的问题是什么时候应该使用mysqli_real_escape_string()函数?
情况01
我有一个包含4个字段的注册表格,分别称为名字,姓氏,电子邮件,密码。
我也应该使用mysqli_real_escape_string()插入查询吗?全部四个领域?
还是足以用于登录表单?
情况02
我有一个个人资料页面,例如profile.php?user_name = damith
我在此页面的许多函数中使用了$ _GET ['user_name']。
我应该在所有这些函数中使用mysqli_real_escape_string()吗?
mysqli_real_escape_string()不再是确保您保存在数据库中的数据安全的最佳方法。相反,您应该使用准备好的语句:http : //php.net/manual/en/mysqli.quickstart.prepared-statements.php
关于您的问题:任何时候您将不确定的数据(尤其是如果该数据来自网络表单等未知来源)放入数据库时,您都应该确保它的格式适合您的数据库。 mysqli_real_escape_string()只能对字符串文字这样做,这就是为什么准备好的语句是更好的方法。任何时候执行依赖于用户提交数据的查询时,都应该使用准备好的语句。
当您输出数据以显示给用户时,您不需要使用 mysqli_real_escape_string(),而应该使用htmlspecialchars()( http://php.net/htmlspecialchars )转义网络
情况 1 - 肯定是,甚至更好的是使用准备好的语句。
情况 2 - 如果您在网页上向用户显示数据,则不需要使用,mysqli_real_escape_string()而应使用htmlspecialchars()以降低 XSS 和其他代码注入攻击的风险。
几个例子:
<?php
// Prepared statement. Save the user's first name to the database:
$stmt = $mysqli->prepare("INSERT INTO users(first_name) VALUES (?)");
$stmt->bind_param("s", $first_name);
$stmt->execute();
// Echo the user's first name back to them
echo "Saved your first name: " .
htmlspecialchars($first_name) . " to the database.";
Run Code Online (Sandbox Code Playgroud)
有关防止 SQL 注入的更多信息,请参阅此优秀答案: 如何在 PHP 中防止 SQL 注入?