开发者社区> 问答> 正文

防止xss+sql注入的问题?报错

刚看了一个放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语句的过滤了?


展开
收起
爱吃鱼的程序员 2020-06-09 13:41:23 794 0
2 条回答
写回答
取消 提交回答
  • 使用orm框架,这种框架可以防止这类问题,如果是自己拼接SQL很容易出问题的,特别一些特殊字符的处理

    2021-10-12 13:38:43
    赞同 展开评论 打赏
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    开源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把用户输入强制转整数即可.

    2020-06-09 13:41:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载