3
回答
防止xss+sql注入的问题
科大讯飞通用文字识别100000次/天免费使用。立即申请   
刚看了一个放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语句的过滤了?

PHP
举报
manbudezhu
发帖于2年前 3回/492阅
共有3个答案 最后回答: 2年前
开源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,请使用 #HTML Purifier

不拼接sql不完了吗?过滤毛线啊
--- 共有 1 条评论 ---
eechen有时拼SQL也无妨,比如: var_export($db->query('SELECT * FROM logs WHERE id='.intval($_GET['id']))->fetchAll(PDO::FETCH_ASSOC)); 用intval把用户输入强制转整数即可. 2年前 回复
顶部