首页 > 后端开发 > php教程 > 如何安全过滤用户提交的数据提交到数据库

如何安全过滤用户提交的数据提交到数据库

WBOY
发布: 2016-06-06 20:49:56
原创
1100 人浏览过

sql注入总是无孔不入(ps:' or 1=1#),该如何安全的过滤好呢(我用的php和mysql_connect)?

回复内容:

sql注入总是无孔不入(ps:' or 1=1#),该如何安全的过滤好呢(我用的php和mysql_connect)?

可以使用 mysql_real_escape_string() 对字符串进行转义,然后再放进 SQL。

<code class="lang-php">$name = mysql_real_escape_string($_POST['name']);
mysql_query('SELECT * FROM `users` WHERE `name` = "'.$name.'"');

//改进版。防 SQL 注入,同时屏蔽 _ 和 % 字符
function escape($str) {
  $str = mysql_real_escape_string($str);
  $str = str_replace(['_', '%'], ['\\_', '\\%'], $str);
  return $str;
}

</code>
登录后复制

这里有官方介绍:http://www.php.net/manual/zh/function.mysql-real-escape-string.php


个人建议还是使用一个WEB框架,常见的WEB框架都有完善的防注入机制。
例如:
简单、快速入门的:CodeIgniter
功能更全面的:Yii (这个官网有时会被墙)

<code>select * from users where name = @name
</code>
登录后复制

参数化查询(Parameterized Query 或 Parameterized Statement)是访问数据库时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值。

在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有指令,也不会被数据库运行。Access、SQL Server、MySQL、SQLite等常用数据库都支持参数化查询。

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板