客户公司用测评软件测评了我们的项目,发现几个安全漏洞,sql注入和xss攻击的,我看了出现安全漏洞的服务端程序代码,发现基本上都是页面向服务端发送get或者post数据的地方出现的漏洞,后端接收数据用的是CI框架自带的input类,可以过滤用户输入的信息,而且CI的csrf
配置项也已经开启
测试工具:
漏洞概况:
有几个头疼的地方:
原先接收
get
和post
数据的代码是这样写的$this->input->get('section_id)
,项目中的其他地方都是这样接收的,按理说是已经做了过滤和安全防范的,为什么还会出现这样的漏洞?如果服务端接收
get、post
数据这里出了问题,那理应项目中所有采用这种方式的地方全都应该有漏洞才对,为什么只有极个别地方出现了这样的漏洞?客户只看检测数据,我该如何向他们解释和沟通?
求指教~
回复内容:
客户公司用测评软件测评了我们的项目,发现几个安全漏洞,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了解来说,你这个问题不修复一直会扫描到,而最根本的办法就是解决掉这些问题,自己去发现漏洞,客户担心可能不是别人攻击他,而是内部人利用漏洞做后门程序,有些客户极少的留有解释的余地。

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境