php防sql注入和xss攻击

xiaoxiao2021-02-28  95

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 );
转载请注明原文地址: https://www.6miu.com/read-30853.html

最新回复(0)