本文共 3953 字,大约阅读时间需要 13 分钟。
Web 安全的Secure By Default原则
(1)黑名单、白名单 (2)最小权限原则 (3)纵深防御原则 (4)数据与代码分离原则 (5)不可预测性原则lginID 和 nickname(昵称)
一个业务安全设计得好的网站,往往loginID和nickname(昵称)是分开的。登录ID是用户的私有信息,只有用户本人能够看到;而nickname不能用于登录,但可以公开给所有人看。什么是XSS?
跨站脚本攻击,英文全称是Cross Site Script,本来缩写为CSS,但是为了和层叠样式表(Cascading Style Sheet, CSS)有所区别,所以安全领域叫做”XSS”。 XSS攻击,通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。(补充:在一开始,这种攻击的演示案例是跨域的,所以叫做“跨站脚本”,但是发展到今天,由于JavaScript的强大功能以及网站前端应用的复杂化,是否跨域已经不再重要。由于历史原因,XSS这个名字一直保留下来)什么是CSRF?
跨站点请求伪造,CSRF的英文全名为Cross Site Request Forgery。什么是注入攻击?
注入攻击是Web安全领域中一种最为常见的攻击方式。XSS本质上是一种针对HTML的注入攻击。 注入攻击的本质,是把用户输入的数据当作代码执行。需要两个条件: (1)用户能够控制输入; (2)原本程序要执行的代码,拼接了用户输入的数据 常见的有SQL注入,利用用户在写SQL时采用字符串拼接的语法,解决的办法是通过预编译语句,绑定变量。MD5加密密码的小技巧
为了避免密码哈希值泄露后,黑客能够直接通过彩虹表查询出密码明文,在计算密码的哈希值时,增加一个“Salt”。“Salt”是一个字符串,它的作用是为了增加明文的复杂度,并且使得彩虹表一类的攻击失效。 Salt的使用如下: MD5(Username+Password+Salt) 其中,Salt=abcddca… (随机字符串) Salt应该保存在服务器端的配置文件中,并妥善保管。Web应用中的访问控制有哪几种?
大致分为三种: (1)基于URL的访问控制 (2)基于方法(method)的访问控制 (3)基于数据的访问控制 一般来说,“基于URL的访问控制”是最常见的,如:Java Web中通过过滤器filter实现,对每个URL进行判断。垂直权限管理中的RBAC是什么?
RBAC:Role-Based Access Control,基于角色的访问控制。 访问控制实际上是建立用户与权限之间的对应关系。 在Java Web中推荐用Spring Security来实现RBAC模型。 Spring Security 提供两种权限管理方式: (1)基于URL的访问控制 (2)基于method的访问控制 即Spring Security中都是验证该用户所属的角色,以决定是否授权。 具体用法见:水平权限管理是什么?
水平权限管理,指的是在同一角色上,系统只能验证访问数据的角色,既没有对角色内的用户做细分,也没有对数据的子集做细分,因此缺乏一个用户到数据之间的对应关系。因此,水平权限管理又可以称之为“基于数据的访问控制”。 解决方法有两种: (1)使用“用户组Group”的概念。比如:一个用户组的数据只属于该组内的成员,只有同一用户组的成员才能实现对这些数据的操作。 (2)实现一个规则引擎,将访问控制的规则写在配置文件中,通过规则引擎对数据的访问进行控制。什么是DDOS?
DDOS又称为分布式拒绝攻击服务,全称是Distributed Denial of Service。 DDOS是利用合理的请求造成资源过载,导致服务不可用。 常见的网络层DDOS攻击有:SYN flood(最常见)、UDP flood、ICMP flood等。应用层DDOS是什么?
应用层DDOS,不同于网络层DDOS,由于发生在应用层,因此TCP三次握手已经完成,发起的IP地址也是真实的。对于网络层的DDOS,现在的Anti-DDOS设备对抗效果较好,而对应用层DDOS攻击缺乏有效的对抗手段。 CC攻击,Challenge Collapasar(挑战黑洞,简称CC)。原理为: 对一些资源消耗较大的应用页面不断发起正常的请求,以达到消耗服务资源的目的。(比如:在Web应用中,查询数据库、读/写硬盘等操作,相对都会消耗较多的资源)解决应用层的DDOS的措施?
(1)应用代码要做好性能优化。比如:合理使用memcache就是一个很好的优化方案,将数据库的压力尽可能转移到内存中。此外还需要及时地释放资源,比如及时关闭数据库连接,减少空连接等消耗。 (2)在网络架构上做好优化。比如:善于利用负载均衡分流,避免用户流量集中在单台服务器上。同时,充分利用好CDN和镜像站点的分流作用,缓解主站的压力。 (3)实现一些对抗手段(最重要)。 比如:限制某个IP地址的请求频率(通过分析网络连接、频率、地域、客户端信息,最终判断哪个请求是非法的)。思路很简单: 通过IP地址与Cookie定位到一个客户端,如果客户端的请求在一定时间内过于频繁,则对之后的客户端的所有请求都重定向到一个出错的页面。 补充:从架构上看,这段代码需要放在业务逻辑之前,才能起到保护后端应用的目的,可以看做是一个“基层”的安全模块。 上述方案存在的问题: 这个方案中有两个因素用以定位一个客户端:一个是IP地址,另一个是Cookie。但用户的IP地址可能会发生改变,而Cookie也可能会被清空,如果IP地址和Cookie同时发生了变化,那么就无法定位到同一个客户端。 补充:(1)为什么既要IP地址又要Cookie才能定位到一个客户端,因为对于局域网来说,可能会有同一个IP地址下有很多客户端,而再加上Cookie就能唯一定位到一个客户端。(2)让IP地址发生变化的做法,可以使用“代理服务器”。针对页面中阻止自动重放行为的措施?
验证码,英文简称为CAPTCHA(Completely Automated Public Turing Test to Tell Computers and Humans Apart, 全自动区分计算机和人类的图灵测试)。 需要注意的是: 如果验证码和文件名是一一对应会存在如下缺陷: 攻击者实现采用枚举的方式,遍历所有的验证码图片,并建立验证码到明文之间的一一对应关系,从而形成一张“彩虹表”,这也会导致验证码形同虚设。 修补的方式: 验证码的文件名需要随机化,满足“不可预测性”原则。 But: 随着图像处理算法的成熟,可以将验证码变化成可识别的图片,从而直接识别出其中的文字或者字母。 改进验证码的用户体验的措施: 我们知道,验证码并非一种好的用户体验,所以应该尽量不要在用户第一次登陆时就增加验证码。 首先,需要检测到暴力破解的行为。 暴力破解通常都有一定的特征,比如:某个账户在5分钟内登陆错误达到10此。还有一种暴力破解攻击是根据若口令来遍历用户名,比如黑客使用密码“123456”,尝试登陆不同的用户名。这需要黑客事先收集一份可以使用的ID列表。 暴力破解的特征:“短时间”、“高频率”Web Server 配置安全的几个规则:
(1)Apache以root身份或者admin身份运行是一个非常糟糕的决定。 (2)Nginx中抵抗DDOS和CC攻击方面的配置参数: worker_processes 1; worker_rlimit_nofile 80000; events{ worker_connections 50000; } server_tokens off; log_format IP $remote_addr; reset_timedout_connection on; listen xx.xx.xx.xx:80 default rcvbuf=8192 sndbuf=16384 backlog=32000 accept_filter=httpready; (3)最小权限原则。没有必要的模块尽量不要引入。密码取回的流程?
1、用户修改密码时,一定要提供当前密码。防止账号被盗,如Cookie挟持导致账户被盗,黑客不知道用户密码的,因此,如果修改密码不询问当前密码,是一个逻辑漏洞。 2、三个方法来认证用户 (1)用户设定的安全问题。比如:“妈妈的生日是什么什么”,答:“生我的那天” (2)用户注册时留下的邮箱。可以通过邮箱修改密码。 (3)用户发送手机短信验证码。这需要用户预留手机信息。 3、当上述信息都不可靠时,选择用户在网站上留下过的私有信息,与用户逐一比对,以验证用户身份确实是本人。比如:用户曾经使用过的密码;用户曾经登录过的时间、地点;用户曾经在站内发表过,但又删除了的文章等。用户账号被盗的途径?
(1)网站登录过程中无HTTPS,密码在网络中被嗅探。 (2)用户电脑中了木马,密码被键盘记录软件所获取。 (3)用户被钓鱼网站所迷惑,密码被钓鱼网站所骗取。 (4)网站某登录入口被暴力破解。 (5)网站密码取回流程存在逻辑漏洞。 (6)网站存在XSS等客户端脚本漏洞,用户账户被间接窃取。 (7)网站存在SQL注入等服务端漏洞,网站被黑客入侵导致用户账户信息泄露。什么是钓鱼网站?
钓鱼网站:是模仿某些网站的页面,以欺骗性的域名,并通过各种文字变形诱骗用户,比如:页面中包含了登录表单的页面,此类网站的目的是骗取用户的密码。转载地址:http://dmomi.baihongyu.com/