php防sql注入和xss攻击

mysql_escape_string  //防sql注入和XSS攻击通用
正则验证必不可少
防XSS攻击
//htmlentities和htmlspecialchars这两个函数对 '之类的字符串支持不好,都不能转化, 所以用htmlentities和htmlspecialchars转化的字符串只能防止XSS攻击,不能防止SQL注入攻击.

测试代码:<script>alert('哈哈')</script>
$new_name=htmlspecialchars($name); //把< >号转义,展示的时候跟填写的一模一样
$new_name=htmlentities($name); //暂时看起来跟htmlspecialchars的效果一样
$new_name=htmlentities($name,ENT_COMPAT,"GB2312"); //防止中文乱码。。但是我测试的时候没有乱码
$new_name=strip_tags($name); //把js标签直接剥离,展示的时候没有js标签了

防sql注入
sql攻击实例:
比如在一个登录界面,要求输入用户名和密码:
可以这样输入实现免帐号登录:
用户名: ‘or 1 = 1 –或者' or 1=1 #
密 码:
点登陆,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了.(当然现在的有些语言的数据库API已经处理了这些问题)
addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。
最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[’lastname’]进行检查一下。
再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:
mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的
当前字符集,而mysql_escape_string 不考虑。
总结一下:
* addslashes() 是强行加\;
* mysql_real_escape_string()  会判断字符集,但是对PHP版本有要求;
* mysql_escape_string不考虑连接的当前字符集。

如果想用mysql_real_escape_string,还得手动连库
mysql_connect('127.0.0.1','root','root');
mysql_select_db('test1');
mysql_query('set names utf8');
$lastname=  mysql_real_escape_string( $lastname );
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值