总结
信息安全-web安全
一、 浏览器安全
- 浏览器中具有非常重要的同源策略,同源策略会过滤一部分威胁,但是也存在被绕过的可能。
- 浏览器沙箱-当前的浏览器都是具有沙箱的功能,把用户上传的javasprit代码单独放到一个沙箱中,这样就导致了影响其他部分的威胁。
- 浏览器对恶意网址的拦截,目前还是一个“黑名单”的形式。
- 目前大部门的浏览器具有xss filer功能。
二、 跨站脚本攻击(XSS)
其实就是用户在网页上传一段javascript
- 的代码然后执行,可分为反射性xss(把用户数据反射给浏览器),第二种类型为存储型xss, 这种类型把用户的数据存储在服务器端,威胁比较大。
- XSS payload就是一段恶意的javascript的脚本。
- 攻击者可以通过构造get和post的请求来进行攻击。(Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求)劫持cookie
- Xss钓鱼也是常见的一种攻击,通过模拟一个网站让你输入用户名和密码。
- 攻击者通过写xss脚本通过jave applet接口可以获取IP地址。
- 比较还用的xss攻击平台:Attack API、BeEF、XSS-Proxy。调试javascript用的工具为firebug
- XSS Worm可以作为蠕虫去攻击。
防御方法:
a. Httponly: 浏览器禁止javascript访问带有httponly属性的cookie.大部分浏览器目前都有httponly
b. 对输入检查,过滤一些特殊符号。
c. 对输出检查,编码中对一些字符进行转化, - XSS是可以彻底解决的。
三、 跨站点请求伪造(CSRF-cross site request forgery)
1.大概意思就是攻击者需要知道重要操作的参数,设计了一个标签,标签伪造了一个恶意的链接操作(URL所有的参数与参数值),如果用户点击就会以作者的身份执行操作,由于是攻击者伪造的所以叫跨站点请求伪造。
2.cookie分为临时cookie-session cookie ,另一种是third-party cookie,本地cookie,本地cookie有有效时间。一般情况下,打开新的tab时,这个cookie禁止被发送。
3.CSRF的防御
A:验证码、
B.referer-Check 检查是否来自同样的“源”
C.现在业界防御CSRF,一致的做法是使用Token。Token就是在url中加载一个token,token的值是随机的,不可预测的,使得攻击者不能伪造出token。
四、点击劫持(Cli ckjacking)
1.点击劫持就是攻击者在网页上布设一些透明的iframe,你然后诱导用户去点击,导致恶意代码被执行。
2.常见的有flash点击劫持、图片攻击覆盖。、
防御办法:
- 通过禁止跨域的iframe来防范,可以写一段javascript代码防止iframe嵌套。X-frame-options一个http的头,用于解决点击劫持。
五、HTML5安全。
HTML5新增的标签如等容易带来新的xss攻击。
服务器安全
一、注入攻击
1.XSS攻击其实也是一种HTML的注入攻击。
2.注入攻击的本质就是把用户输入的数据当作代码执行,两个条件,第一是用户能够控制输入,第二是原本程序要执行的代码拼接用户输入的数据。如select * from ordertable where city=“bejing”,本来输入北京就可以,但是我直接输入beijing’;drop table*. 就会多执行,导致表被删除。特别是如果有错误回显,我们更容易获取数据库的类型。
3.盲注:关闭了错误回显的情况下,构造简单的条件语句,看看返回页面的变化,来判断sql语句是否执行。(如构造and 1=1 或者and 1=1)
4.timing attack
利用BENCHMARK(count,expr)函数,让expr执行count次看执行的时间,根据执行的时间,判断注入语句是否执行成功,这是一种边信道攻击。
5.数据库攻击技巧:命令执行、攻击存储过程、sqlmap、编码问题。
二、正确防御SQL注入
1.找到所有的sql注入漏洞、修复这些漏洞
2.使用预编译语句,绑定变量。
3.使用存储过程:将sql语句定义到数据库中,避免动态sql语句
4.检查数据类型:如限制输入类型必须是integer等。
5.使用安全函数:web语言中自带的编码函数,可以对抗sql语句。
三、其他注入攻击
1.XML注入、代码注入等,其中代码注入如eval()system()函数,避免使用。(开发或者中,需要明确那些不安全函数是禁止使用的)
2.CRLF注入:分隔符的注入,不同语义之间的分隔符。
3.只要牢记“数据与代码”的分离原则,在拼凑发生的地方进行检查,注入攻击是可以彻底杜绝的。(使用白名单比黑名单要安全的多)
四、文件上传漏洞
用户通过上传一个可执行的脚本文件,并通过该脚本来控制服务端的能力。如上传web脚本语言、flash策略文件、病毒、木马、钓鱼图片、包含脚本的图片、合法文件中包含PHP脚本。
- 绕过文件上传检查功能:攻击者手动修改了上传过程的POST包,在文件名后添加一个%00字节,则可以截断某些函数对文件名的判断。如上传xxx.php[\0].jpg. [\0]有截断的关系,所以系统会认为你上传的文件是php文件.
- Apache文件解析问题:Apache文件解析从后往前解析,直到有认识的类型,才停止解析。如phpshell.php.rar.rar,由于apache不认识rar,会认为是一个php文件。
- IIS文件解析问题:“;”为截断,如你上传一个jpg文件名为a.asp;.jpg.系统解析到asp就会截止。然后执行asp文件。
防御方法: - 文件上传目录设置不可执行:web服务器不执行,单独放在一个服务器上,做静态文件处理。
- 判断文件类型:采用白名单,不要使用黑名单。对于图片的处理,可以使用压缩函数或者resize函数。
- 使用随机数改写文件名和文件路径:上传后,我添加随机数,增大攻击成本。
- 单独设置文件服务器域名。
四、 认证与会话管理 - 认证和授权是不一样的,认证是认出用户是谁,授权是决定用户可以做什么。(多因素认证高于单因素认证)
- SessinonID ,是用户登录后的一个会话,是由生命周期的,攻击者常常截获session来发起攻击。攻击者也会不停的发起请求,让这个session一直存活。
- 单点登录(SSO):威胁集中到了单点上,有利也有弊,有利是工程师可以针对这一点加很多安全措施,坏处是一旦失效,所有系统将受到破坏。
六、访问控制
1.在安全设计时,经常会用到垂直权限管理(基于角色的访问控制,spring security提供了安全检查框架filter chain)。
2.水平权限管理:相当于垂直权限管理,问题在同一个角色上,系统只验证了角色,没有对角色内的用户去验证,这种叫水平权限验证,也叫基于数据的访问控制。
七、加密算法与随机数
攻击者除了破解密码之外,其实现实生活中最容易出问题的是密码的管理问题,有开发者通常习惯性的把密码写进代码中,很容易被攻击者通过软件逆向把密码给破解出来。
防御:
- 不要使用ECB模式(非对称加密)
- 不要使用流密码(RC4)
- 使用HMAC-SHAI代码MD5
- 不要使用相同的KEY做不同的事情
- Salts与IV随机产生
- 使用CBC模式的AES256用于加密
- 不要依赖系统的保密性