微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我什么时候应该使用PHP mysqli_real_escape_string()函数?

参见英文答案 > How can I prevent SQL injection in PHP?                                    28个
我知道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

关于你的问题:无论何时你将不确定的数据(特别是如果数据来自Web表单等未知来源)放入数据库,你应该确保它的数据库格式正确. MysqLi_real_escape_string()只能对字符串文字执行此操作,这就是为什么预处理语句是更好的方法.无论何时执行依赖于用户提交的数据的查询,您都应该使用预准备语句.

当您输出数据以显示用户时,您不需要使用MysqLi_real_escape_string(),而应使用htmlspecialchars()(http://php.net/htmlspecialchars)转义为Web

情况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.";

有关阻止sql注入的更多信息,请参阅以下优秀答案:How can I prevent SQL injection in PHP?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐