刚看了一个放xss和sql注入的文章:
框架类型或者有公共文件的,建议在公共文件中统一做一次XSS和SQL注入的过滤。写个过滤函数,可由如下所示:
$_REQUEST = filter_xss($_REQUEST);
$_GET = filter_xss($_GET);
$_POST = filter_xss($_POST);
$_COOKIE = filter_xss($_COOKIE);
$_POST = filter_sql($_POST);
$_GET = filter_sql($_GET);
$_COOKIE = filter_sql($_COOKIE);
$_REQUEST = filter_sql($_REQUEST);
最简单的filter_xss函数是htmlspecialchars()
最简单的filter_sql函数是mysql_real_escape_string()
当然,谁都知道这种过滤filter_sql只能过滤字符型和搜索型的注入,对于数字型是没有办法的,但也说明做了这层过滤后,只需在后面注意数字型的SQL语句就可以了,遇到了加intval过滤就可以了,这就变得容易多了.
我直接使用htmlspecialchars($_POST)或mysql_real_escape_string($_POST)会报错,因为这两个函数转换的类型是字符串类型的,而$_post.....是数组类型的.按照这个思路我该怎么做xss和sql语句的过滤了?
开源Web应用最常见漏洞和防御方法:
1.XSS(跨站脚本攻击):htmlspecialchars/HTMLPurifier过滤后输出
2.SQL注入:预处理参数化查询
3.远程和本地文件包含漏洞:allow_url_fopen=On(默认值)include($_GET['file']);这样做是危险的.
4.跨站请求伪造CSRF:操作加上csrf_token或者验证码(csrf_token可以放在URL的get参数里,表单的隐藏域里,或者AJAX的参数里)
5.远程命令执行(RCE)命令注入
xss和注入的防御思路完全不一样
另外楼主的方案至少是10年以前的,早已落伍
对于注入,使用PDO或者mysqli的prepare方式来解决
对于XSS,请使用#<spanstyle="font-family:Verdana,sans-serif,宋体;font-size:13.3333px;line-height:21.3333px;background-color:#FFFFFF;">HTMLPurifier#
不拼接sql不完了吗?过滤毛线啊有时拼SQL也无妨,比如:var_export($db->query('SELECT*FROMlogsWHEREid='.intval($_GET['id']))->fetchAll(PDO::FETCH_ASSOC));用intval把用户输入强制转整数即可.版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。