22

web应用存在的10大安全问题,安全测试不容忽视!

 5 years ago
source link: http://blog.sina.com.cn/s/blog_679bde160102xgpt.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

随着web、社交网络等一系列新型的互联网产品的不断升级,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是web安全威胁的凸显,对web服务器的攻击可以说是形形色色。

2QFjIre.jpg!web

先回顾一下 前几年 发生 的由于互联网安全问题引发的事件

1、 携程网用户支付信息出现漏洞:漏洞泄露的信息包括用户的姓名、身份证号码、银行卡卡号、银行卡CVV码

2、 UC浏览器用户敏感数据泄漏的漏洞:只要用户通过UC浏览器搜索并登录人人、新浪微博等网站,其提交的用户信息和密码都有可能被黑客截取

3、 小米论坛存在用户资料泄露:泄露涉及800万小米论坛注册用户

那么造成这些问题的原因是什么呢 ?下面我来为大家进行分析。

web应用通常存在的10大安全问题

1、 SQL注入 拼接的SQL字符串改变了设计者原来的意图,执行了如泄露、改变数据等操作,甚至控制数据库服务器, SQL Injection与Command Injection等攻击包括在内 2、跨站脚本攻击(XSS或css) 跨站脚本(Cross-Site Scripting)是指远程WEB页面的html代码可以插入具有恶意目的的数据,当浏览器下载该页面,嵌入其中的恶意脚本将被解释执行,从而对客户端用户造成伤害。简称CSS或XSS 3、没有限制URL访问 系统已经对URL的访问做了限制,但这种限制却实际并没有生效。攻击者能够很容易的就伪造请求直接访问未被授权的页面 4、越权访问 用户对系统的某个模块或功能没有权限,通过拼接URL或Cookie欺骗来访问该模块或功能 5、泄露配置信息 服务器返回的提示或错误信息中出现服务器版本信息泄露、程序出错泄露物理路径、程序查询出错返回SQL语句、过于详细的用户验证返回信息。 6、不安全的加密存储 常见的问题是不安全的密钥生成和储存、不轮换密钥,和使用弱算法。使用弱的或者不带salt 的哈希算法来保护密码也很普遍。外部攻击者因访问的局限性很难探测这种漏洞。他们通常必须首先破解其他东西以获得需要的访问。 7、传输层保护不足 在身份验证过程中没有使用SSL / TLS,因此暴露传输数据和会话ID,被攻击者截听,或使 用过期或者配置不正确的证书。 8、登录信息提示 用户登录提示信息会给攻击者一些有用的信息,作为程序的开发人员应该做到对登录提示信 息的模糊化,以防攻击者利用登录得知用户是否存在 9、重复提交请求 程序员在代码中没有对重复提交请求做限制,这样就会出现订单被多次下单,帖子被重 复发布。恶意攻击者可能利用此漏洞对网站进行批量灌水,致使网站瘫痪 10、网页脚本错误 访问者所使用的浏览器不能完全支持页面里的脚本,形成“脚本错误”,也就是网站中的脚 本没有被成功执行。遇到“脚本错误”时一般会弹出一个非常难看的脚本运行错误警告窗口

在OWASP(The Open Web Application Security Project)的安全问题TOP10里,以下几个占比超过50%:

sql注入:

拖库 通过技术手段,利用网站安全漏洞把服务器数据库中的数据全部或部分获取;网站越大,用户信息越多,拖库的影响越大,危害越大

撞库 很多用户在登录不同网站时为了图方便好记,往往喜欢用统一的用户名和密码,黑客把拖库取得的用户名及密码跟网络银行、支付宝、淘宝等有价值的网站进行匹配登录,这就是“撞库”

爆破 俗称“暴力破解”或“爆破”,对已知的用户名,使用密码字典库暴力尝试、破解用户密码;如果网站不限制密码重试次数,被爆破成功的概率较高 这里的拖库,就是我们平时所说的sql注入,利用前端和后台的疏忽,将后台数据库中的数据全部拖出

解决办法:

1. 不要信任用户的输入,对用户的输入进行校验

正则校验、长度限制、特殊字符转码(' --)

2. 不要使用动态拼接SQL

参数化sql、类型判定

3. 不要使用管理员权限的数据库连接

为每个应用开放有限的独立权限

4. 数据库机密信息不要明文存储 加密、hash

5. 异常信息不要直接返回给用户

使用自定义的错误信息进行包装

跨站脚本攻击(Cross Site Scripting)

这里解释一下,因为跨站脚本攻击的缩写是CSS,为了与CSS区分,所以这里缩写为XSS

攻击者向web页面里插入恶意html代码 用户浏览该页之时,嵌入其中的html代码会被执行 通常以获取用户cookie为目的注入内容以javascript为 主, xss又分反射型和存储型,两者原理类似反射型xss的特点是请求即执行;而存储型xss的特点是先存储,再执行; 大概过程可以用一张图概括 

E36Bru6.jpg!web

解决办法:

内容过滤:过滤关键字"javascript..."

转码:分号、<>...

Cookie属性:Secure、http-only

失效的身份认证和会话管理

这类问题细分起来种类繁多,举几个有代表性的吧

web应用在开发时,可能存在为了实现需求而自定义身份认证方式或会话管理方式,例:会话id存在url中,这样如果直接copy别人的url,那么可以直接使用这个人的账户信息;用户名、密码等信息cookie未设置过期时间,那么当他人登录同一客户端时,也可能会直接使用他人账户;

解决办法:

避免未经授权访问会话状态

限制会话寿命

对身份验证cookie 的内容进行加密

不要在网络上以纯文本形式发送密码

在web应用程序中是什么导致安全性问题呢?一般有以下几个原因

1、 复杂应用系统代码量大、开发人员多、难免出现疏忽 2、系统屡次升级、人员频繁变更,导致代码不一致 3、历史遗留系统、试运行系统等多个Web系统共同运行于同一台服务器上 4、开发人员未经过安全编码培训或者公司根本就没有统一的安全编码规范 5、测试人员经验不足或者没经过专业的安全评估测试就发布上线 6、没有对用户的输入进行验证: 1)永远不要信任用户的输入,要对用户的输入进行校验 2)数字型的输入必须是合法的数字 3)字符型的输入中对 编码符号要进行特殊处理 4)验证所有的输入点,包括Get,Post,Cookie以及其他HTTP头

总结:

Web安全是我们测试组一直以来作为和性能测试并驾齐驱的两个重点。开发的过程中还需要着重注意,该转义的地方转义;该屏蔽的地方屏蔽,该过滤的地方过滤等等。 下半年 又到了,势必又有大批的发号抽奖之类的活动开发、上线,在这个过程中,安全问题是我们每个人应该紧绷的神经,对于我们测试人员来说,每个活动需要做到手动安全测试加自动化安全测试相结合。

欢迎加入51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 2173383349

关注51Testing软件测试网,提升it技能,从不会到熟练只差一步。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK