1.防范常见的Web攻击
1)什么是SQL注入攻击?
攻击者在HTTP请求中注入恶意的SQL代码,服务器使用参数构建数据库SQL命令时,恶意SQL被一起构造并在数据库中执行。
用户登录时,输入用户名:root,密码:‘’or‘1’=‘1’。如果此时使用参数构造的方式,就会出现select * from user where name =‘root’ and password = ‘’ or ‘1’ = ‘1’。此时不管用户名和密码是什么内容,查询出来的用户列表都不为空。
如何防范SQL注入攻击?
web端:
1)有效性验证
2)限制字符串输入的长度
服务端:
1)不用拼接SQL字符串
2)使用预编译的PrepareStatement
3)有效性检验(为什么服务端还要做有效性检验?因为外部都是不可信的,防止攻击者绕过Web端请求)
4)过滤SQL中参数的特殊字符,比如单引号、双引号。
2)什么是XSS攻击?
跨站点脚本攻击,指攻击者通过篡改网页,嵌入恶意脚本程序,在用户浏览网页时,控制浏览器进行恶意操作的一种攻击方式。
怎么防范XSS攻击?
1)前端、服务端,需要对字符串输入的长度进行限制。
2)前端、服务端同时需要对HTML转义处理。将其中的“<”“>“”等特殊字符进行转义编码。防止XSS攻击的核心是必须对输入的数据进行过滤处理。
3)什么是CSRF攻击?
跨站点请求伪造,指攻击者通过跨站请求,以合法用户的身份进行非法操作。简单理解为攻击者盗用你的身份,以你的名义向第三方网站发送恶意请求。CSRF能做的事情包括用你的身份发送邮件、发短信、进行转账交易,甚至盗取账号信息。
如何防范CSRF攻击?
1)安全框架:例如Spring Security。
2)token机制:在HTTP请求中进行token验证,如果请求中没有包含token或者token内容不正确,则认为是CSRF攻击而拒绝该请求。
3)验证码:利用验证码能够很好遏制CSRF攻击,但是出于用户体验考虑,验证码只能作为一种辅助手段,而不是最主要的解决方案。
4)referer识别:在HTTP头部有一个Referer字段,它记录了HTTP请求的来源地址,如果Referer是其他网站,就可能是CSRF攻击,则拒绝该请求。但是,服务器并非都能取到Referer,很多用户出于隐私保护,限制Referer发送;在某些情况下,浏览器也不会发送Referer,例如HTTPS跳转到HTTP。
基本思路:验证请求来源地址;关键操作添加验证码;在请求地址添加token并验证。
4)什么是文件上传漏洞?
文件上传漏洞,指的是用户上传一个可执行的脚本文件,并通过脚本命令获得执行服务端命令的能力。
如何防范文件上传漏洞?
1)判断文件类型。
2)对上传的文件类型进行白名单校验,只允许上传可靠类型。