我什么时候应该使用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?

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...