客户公司用测评软件测评了我们的项目,发现几个安全漏洞,sql注入和xss攻击的,我看了出现安全漏洞的服务端程序代码,发现基本上都是页面向服务端发送get或者post数据的地方出现的漏洞,后端接收数据用的是CI框架自带的input类,可以过滤用户输入的信息,而且CI的csrf
配置项也已经开启
测试工具:
漏洞概况:
有几个头疼的地方:
原先接收get
和post
数据的代码是这样写的$this->input->get('section_id)
,项目中的其他地方都是这样接收的,按理说是已经做了过滤和安全防范的,为什么还会出现这样的漏洞?
如果服务端接收get、post
数据这里出了问题,那理应项目中所有采用这种方式的地方全都应该有漏洞才对,为什么只有极个别地方出现了这样的漏洞?
客户只看检测数据,我该如何向他们解释和沟通?
求指教~
1 这种测试软件的判断不一定准确,一般他只判断 片接不同的语句返还的结果的字符长度是否相同来判断是否存在注入
2 不要太相信什么框架不框架,安全这一块要自己做全局过滤
3 他这里检测的xss 都不是存储型的,危险度没那么高。像这种最多被用作跳板
4 客户要的只是报告上没有漏洞的心里安慰而已。
5 如果你只是想让他扫描不到漏洞。在程序入口写入日志文件,记录所有请求以及参数,来分析这个扫描软件是如何来判断是否存在漏洞的。
6 修改扫描软件的报告上的漏洞,个人经验 这个应该是你传递的参数没有intval
7 关闭mysql 错误提示,防止报错注入
防范
1 在程序加入全局sql关键字过滤
2 开启PHP单引号转义(修改php.ini magic_quotes_gpc)。
3 apache/nginx/iis开启服务日志,mysql慢查询日志,程序入口记录请求日志
4 服务器安装安全狗等web应用安全软件
5 数据库链接方式使用UTF-8 防止gbk双字节注入
6 增强mysql密码的复杂度,禁止mysql外链,更改默认端口号
7 给程序mysql账号做降权,只给普通的增删查改权限。禁止给文件操作权限
XSS跨站攻击 解决方案
1 有文本写入的地方运用htmlspecialchars 转义
2 利用SSL禁止加载引用外部js
3 设置httponly 禁止获取cookie
4 已上是确保没有注入的情况下(如果存在注入,是可以利用16进制绕过htmlspecialchars 达到xss攻击的效果)
5 后台和前台最好使用2套路由规则不一样的程序,后台关键操作(备份数据库)应该设置二级密码,和增加请求参数的复杂度,防止CSRF
PHP 安全
1 上传文件的地方增加后缀过滤,过滤时不要做“逻辑非”判断。
2 禁止上传后缀php,htaccess的文件,不要使用客户端提交过来的数据获取文件名后缀,应该用程序做添加后缀以及随机文件名
3 统一路由,限制越权访问。webroot目录对外防问的只能有一个index.php(入口文件),其它所有目录,禁止外部防问,所有 资源(上传)文件,在nginx 加上防盗链功能
4 PHP降权处理,web目录限制创建文件夹和文本(程序所需要的文件夹除外,一般都会有个缓存目录需要可写权限)
5 对IIS/nginx 文件解析漏洞利用做过滤
6 找回密码使用手机验证码找回,邮箱找回应该用额外的服务器。(防止通过找回密码的功能得到真实ip)。最后发送给用户邮箱的重置密码的链接需要有个复杂的加密参数
7 用户登录系统应该做单一登录功能,如果用户已登录,其他人再次登录是应该给与提示。
8
1 安全常识
1 web应用使用站库分离,更改环境web目录的默认路径
2 当使用集成环境时,安装完成后应该删掉php探针,以及phpmyadmin,phpinfo(探针可以查看你的web路径,phpmyadmin可以暴力破解)
2 用户密码最好采用 密码加盐 之后的md5值
3 用户登陆的地方增加验证码,怎加错误次数限制,防止暴力破解
4 使用cdn加速隐藏真实ip
5 用户登陆的时候,不要传递明文账号密码,防止C端嗅探,通过ARP欺骗获取用户以及管理员明文账号密码
6 禁用php系统命令行数exec,system 等
7 服务器上装安全狗等安全防护软件
8 web目录 禁止存放.rar,zip文件
我对RSAS和BVS了解来说,你这个问题不修复一直会扫描到,而最根本的办法就是解决掉这些问题,自己去发现漏洞,客户担心可能不是别人攻击他,而是内部人利用漏洞做后门程序,有些客户极少的留有解释的余地。