php 写入数据库过滤,如何安全过滤用户提交的数据提交到数据库

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

回复内容:

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

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

$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;

}

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

个人建议还是使用一个WEB框架,常见的WEB框架都有完善的防注入机制。

例如:

简单、快速入门的:CodeIgniter

功能更全面的:Yii (这个官网有时会被墙)

select * from users where name = @name

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

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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值