文件上传漏洞
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
因此,文件上传导致的常见问题有:
- 上传文件是
Web
脚本语言,服务器的Web
容器解释并执行了用户上传的脚本,导致代码执行。 - 。上传文件是
Flash
的策略文件crossdo-main.xml
,黑客用以控制Flash
在该域下的行为(其他通过类似方式控制策略文件的情况类似)。 - 上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。
- 上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。
如何设计安全的上传功能
- 文件上传的目录设置为不可执行,文件上传后会放到独立的存储上,做静态文件处理。
- 判断文件类型,增加黑名单逻辑。
- 使用随机数改写文件名跟路径。
- 单独设置文件服务器的域名。
认证与会话管理
认证的目的是为了认出用户是谁,而授权的目的是为了决定用户能够做什么。
形象地说,假设系统是一间屋子,持有钥匙的人可以开门进入屋子,那么屋子就是通过“锁和钥匙的匹配”来进行认证的,认证的过程就是开锁的过程。
钥匙在认证过程中,被称为“凭证”,开门的过程,在互联网里对应的是登录。
可是开门之后,什么事情能做,什么事情不能做,就是“授权”的管辖范围了。
那实际问题来了,拿着钥匙的人,就一定是屋子的主人吗?
密码
密码是互联网作为最基础的认证手段。 密码的优点在于成本低,认证过程实现比较简单,缺点是容易被pojie。
多因素认证
因为密码不太安全,因此大多数银行会增加手机动态口令、数字证书、宝令、支付盾、第三方证书等都可用于用户认证。这些不同的认证手段可以互相结合,使得认证的过程更加安全。
Session Fixation攻击
什么是Session Fixation
呢?举一个形象的例子:
假设A有一辆汽车,A把汽车卖给了B,但是A并没有把所有的车钥匙交给B,还自己藏下了一把。这时候如果B没有给车换锁的话,A仍然是可以用藏下的钥匙使用汽车的。
这个没有换锁而导致的安全问题,就是SessionFixation
问题。
在用户登录网站的过程中,如果登录前后用户的SessionID
没有发生变化,则会存在Session Fix-ation
问题。
具体攻击的过程:
- 用户
X
(攻击者)先获取到一个未经认证的SessionID
; - 然后将这个
Ses-sionID
交给用户Y
去认证; Y
完成认证后,服务器并未更新此SessionID
的值(注意是未改变Ses-sionID
,而不是未改变Session
);- 所以
X
可以直接凭借此SessionID
登录进Y
的账户。