Web Application Security(Web应用安全)
Web Application Security
1.web应用面临的主要安全问题
1)黑客入侵:撞库拖库、网页篡改、后门木马、加密勒索、数据泄露
2)恶意内容
2.web应用安全现状
1)网站安全问题:弱口令 > SQL注入 > 信息泄露 > 命令执行
2)web应用攻击类型:Webshell探测 > 命令执行 > sql注入 > 文件包含 >文件上传
3)漏洞类型:缓冲区溢出 > 跨站脚本 > 输入认证 > SQL注入 > 权限许可与访问控制
3.Web应用被攻击的原因:
自身存在漏洞
1)业务:缺乏业务风险控制手段 。垃圾注册大量用户获取出事击放和投票权;绕过接口验证机制,尝试批量破解用户账号密码(撞库)
2)内容:不对UGC进行内容审核。
3)数据层:数据明文存储和传输。入侵后窃取用户信息或篡改数据,例如篡改网页
4)应用层:存在应用和业务逻辑漏洞。通过罗东入侵后端服务器和数据库
5)主机层:弱口令、系统漏洞。通过系统漏洞入侵,并上传后门、木马
6)网络层:没有防范DDoS进攻的能力。DDoS/CC攻击,造成业务中断
7)移动APP:移动App未加固。反编译破解App客户端,获得敏感代码,进而伪造或篡改信息,或制作仿冒应用
威胁持续加剧
1)国家背景支持:政治动机驱动
2)漫无目的黑客:脚本小子。到处显示自己能力的黑客
3)网络犯罪:窃取金融信息、个人信息、DDOS、安装Botnet等,主要经济利益驱动
4)自动驱动型黑客:名利驱动型。可以发动高难度的入侵,主要证明自己的能力;
5)白帽子:热爱黑客技术,主要是帮助企业发现安全漏洞,可能是专业也可能是初学者
信息价值的飞速提升-》经济利益
4.web应用安全类型
1)注入:
攻击者发送恶意数据构造数据查询或操作系统命令
注入类型包括:SQL注入、操作系统命令注入、XML注入、LDAP注入等
注入是解释性语言(如脚本语言和标记型语言)不得不面对的挑战性问题
危害:信息泄露(数据库被窃取)、操作系统被控制
SQL注入:
示例:2016年,中国银行某站MySql注入(涉及管理员密码/大量用户卡号信息)
华为某站存在SQL注入(17w用户&任意文件下载)
天虹基金主站存在SQL注入
SQL注入的原因:
对敏感字符不加过滤不做转义处理
单引号篡改SQL语句
注释符号 --或 /**/篡改SQL语句
分号;在同一字符串内执行多个数据操作
SQL注入代码示例:
String query="SELECT * FROM accounts WHERE custID=' "+request.getParamenter("id")+"'";
恶意输入
http://example.com/app/accountView?id='or'1 ='1'
被篡改后的SQL语语句
SELECT * FROM accounts WHERE custID='or'1'='1'
//即custID=' 或 '1'='1'时,查询accouts,但1恒等于1,所以该SQL就等价于 Select * From accouts
SQL注入预防
对输入数据进行验证/编码/过滤
不要动态主装SQL语句,正确使用预编译SQL语句
如果需要动态组装sql语句,确保在使用输入数据在构造SQL之前,对特殊字符进行转义
加固数据库,控制损失范围
禁止将任何高权限账号(例如:root\data\sa等)用于应用程序数据库访问。更安全的方法是单独为应用创建有限权限的账号
限制账号所能访问的数据表
拒绝账号访问敏感的系统存储过程
2)失效的认证和会话管理
身份认证:用户名/密码>Token/PIN>指纹/脸扫描
会话管理:Http利用会话管理机制来实现连接识别。用户登录通过身份认证后获取session,通常放在cookie中,之后根据session对用户身份进行识别,而不需要每次都要登陆
危害:信息泄露、用户会话被劫持
预防方法:
使用SSL保护用户身份信息和sessionID
对用户密码强度设置做要求
登录使用验证吗或双因子认证账号进行短时锁定(双因子
对连续多次登录失败的账号进行短时锁定
不使用简单或可预期的密码保护问题
验证成功后更换sessionID
不在URL中显示sessionID
设置session闲置超时
确保退出、注销功能强制销毁session
3)跨站脚本攻击(XSS)
攻击者通过在Web页面输入点 注入恶意脚本,若web应用对输入数据不进行处理,直接结果输出到浏览器,浏览器将执行恶意脚本
XSS攻击类型:
非持久型:也称反射型XSS,通过Ge和post方法,将注入的恶意数据放置在URL的query字符串 或 form 数据中。如果服务器端对输入的数据不进行过滤,验证或编码,将恶意数据直接呈现给客户,可能会造成XSS
持久型,也叫存储型XSS,通常因为服务器端未将输入的恶意脚本通过验证就直接存储到数据库
危害:Dos攻击(使网络阻塞/主机资源耗尽)、信息泄露、篡改网页
示例:2011年,新浪微博Xss攻击事件:大量用户中毒后自动向自己的粉丝发送带链接的私信和微博,并自动关注一名hellosamy的用户。由于微博使用的是短链接,用户只能看到诱人的新闻标题的私信和微博,当他们点击链接后便也会中毒,造成恶性循环
预防方式:
编码:直接将HTML标签最关键的字符<>&编码为⁢>&
过滤:将script/style/iframe/onmouseover等有害字符串去掉,但保留<>&等有限的基本标签
防范XSS的真正挑战在于全面
输入过滤:比较低效,只使用过滤会很难全面(前端包含91中HTML标签、十多种编码方式、数种对象类型...),而且可能导致意外结果(例如:alice's变成alices),有时候还需要多次过来(例如:<scrip<script>t> )
输入编码:可设计全局的解决方案
输出编码:用于解决输入编码无法处理的已入库数据
借助第三方代码库
Java:OWASP的WSAPI与Java Encoder、Coverity Security Library(CSL)
JavaScript:Encoder.js、DOMPurify
4)不安全对象直接引用
用户可以通过修改访问参数可以直接访问非授权信息(例如:http://www.ddd.com/userinfo.do?ID=)
原因:开发者未设置合理的访问权限控制
示例:澳大利亚一个税务局网站被攻击者通过简单的修改ID获取了上万家公司的信息
危害:信息泄露
预防方式:(以下方案结合使用)
使用随机书使唯一标识变得难以猜测,增加攻击难度
隐藏实际引用,使用随机书为直接引用标识,生成非直接引用标识
确保对每个页面的访问都坚持访问去权限和页面所有权
5.Web 安全测试工具
白盒商业:
HPE Fortify(Static Code Analyzer)
IBM Security AppScan Source
CA Veracode Greenlight
Sonar Source Code Analyzers
白盒开源:
SonarQube,SonarLint
FindBugs
黑盒商业:
HPE Fortify WebInspect
SoapUI NG Pro
黑盒开源:
Selenium
soapUI
OWASP ZAP
sqlmap
Metasploit
w3af
Burp Suite
6.Web应用安全交互测试工具(即,开发时提示是否有漏洞)
商业:
HPE Fortify Declnspect
7.HPE Fortify 使用
Static Code Analyzer 源码静态扫描
WebInspect动态扫描
将扫描工具和集成Software Security Center。扫描发现的漏洞会自动创建SSC。SSC可以对比前后测试结果改进,提供测试报表
8.Web安全控制的流程:
inital review
Threat modeling
Design review
Code review
Risk assessment
Risk mitigation
Benchmark
Maintain
没有对敏感字符
Web Application Security(Web应用安全)的更多相关文章
- Web Application和Web Site两个模板的比较
Scenario Web Application Project Web Site Project 项目定义 跟 Visual Studio .NET 2003 类似,由于项目文件的存在,只有被项目文 ...
- Spring Security(三十七):Part IV. Web Application Security
Most Spring Security users will be using the framework in applications which make user of HTTP and t ...
- IDEA artifacts Web Application:Exploded Web Application:Archive
首先,artifacts是maven中的一个概念,表示项目/modules如何打包,比如jar,war,war exploded,ear等打包形式,一个项目或者说module有了artifacts 就 ...
- Spring Security(二十八):9.4 Authentication in a Web Application
Now let’s explore the situation where you are using Spring Security in a web application (without we ...
- ModSecurity web application firewall (WAF) Research
catalog . 引言 . OWASP ModSecurity Core Rule Set (CRS) Project . Installation mod_security for Apache ...
- What is Web Application Architecture? How It Works, Trends, Best Practices and More
At Stackify, we understand the amount of effort that goes into creating great applications. That’s w ...
- WEB APPLICATION PENETRATION TESTING NOTES
此文转载 XXE VALID USE CASE This is a nonmalicious example of how external entities are used: <?xml v ...
- Tomcat翻译--Tomcat Web Application Deployment(Tomcat中部署web应用)
原文:http://tomcat.apache.org/tomcat-7.0-doc/deployer-howto.html Introduction(介绍) Deployment is the te ...
- ASP.NET Web Application中使用链接文件
最近重构一个内部的平台系统,作为一个平台,其下有几个子系统,每个子系统有自己的网站系统.而每个网站使用的是统一的风格,统一的验证机制,反馈系统,等等.所以,为了避免几个子系统中重复出现相同的资源或文件 ...
随机推荐
- Angular笔记-select
--select-- 设置默认选中值方法: <select ng-model="url" ng-options="x.url as x.site for x in ...
- 在visual studio 2013中编译Lua5.3.1
注:以下是基于 别人的教程或笔记来操作并按照自己的操作记录的纯文字版编译和hello lua过程. 原图文版链接: 原文链接 1.创建空的解决方案: 文件->新建->项目->其他项目 ...
- 【转载】PHP5.3 配置文件php.ini-development和php.ini-production的区别
引言 虽然现在PHP版本已经升级至7.*了,由于自己略懒,就在网上找了一篇略谈 php.ini-development 和 php.ini-production 区别的文章,重点是想要最后的那张表. ...
- hdu5592 倒序求排列+权值线段树
这种题为什么要用到主席树啊..8说了,直接上代码 /* 1-n的排列,给定所有前缀的逆序对数量,要求恢复排列 首先能确定最后一个数是什么,然后倒序确定即可 开线段树找空位:如果Ai-Ai-1=k,说明 ...
- Vue中的template标签的使用和在template标签上使用v-for
我们知道 .vue 文件的基本结构是: <template> ........ </template> <script> export default { nam ...
- 为什么用Flow
Flow 是 facebook 出品的 JavaScript 静态类型检查工具.Vue.js 的源码利用了 Flow 做了静态类型检查,所以了解 Flow 有助于我们阅读源码. flow的工作方式? ...
- python第九天(9-34)
一:队列的三种模式 先进先出(FIFO) class queue.Queue(maxsize) 后进先出(LIFO) class queue.LifoQueue(maxsize) 优先级顺序(优先级低 ...
- RPC原理及实现
一.什么是RPC RPC 的全称是 Remote Procedure Call 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个 ...
- js分析 天_眼_查 字体文件
0. 参考 js分析 猫_眼_电_影 字体文件 @font-face 1. 分析 1.1 定位目标元素 1.2 查看网页源代码 1.3 requests 请求提取得到大量错误信息 对比猫_眼_电_影抓 ...
- open_basedir php授权目录设置
php为了安全性考虑,有一项 open_basedir 的设置.根据你web服务器环境,open_basedir可以在几个地方设置. 首先 在php.ini中配置. ;open_basedir = 如 ...