
今天了解了一下Web常用的攻击手段,了解的常见的攻击手段我们在开发的时候才会有相应的安全意识然后采取一定的防御手段,一起了解一下喽~
今天先简单介绍一下:HTTP请求防盗链、CSRF攻击、忘记密码漏洞、上传文件的漏洞。
什么是防盗链?
举个例子:比如A网站有一张图片,被B网站直接通过img标签属性引入,直接盗用A网站图片展示,如果不做限制,这样可能导致A网站的服务器压力增大,流量增高。这就需要我们实现防盗链,简单讲其实就是限制资源,只能在某个域名(某个服务器)访问,互联网通信底层实质就是Socket通信,所以这里所说的资源本质上就是二进制文件流,可以是图片、视频、文件等资源。
如何实现防盗链?
通过判断http请求头Referer域中的记录来源的值,如果和当前访问的域名不一致的情况下,说明该图片可能被其他服务器盗用。类似我们网关实现黑白名单权限的实现。如下我们发送请求,在request中记录了Referer属性:

比如在Java中我们可以使用:过滤器判断请求头Referer记录请求来源,代码如下:这里举个简单例子,实现图片防盗链
@WebFilter(filterName = "imgFilter", urlPatterns = "/imgs/*")public class ImgFilter implements Filter {@Value("${domain.name}")private String domainName;public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;String referer = req.getHeader("Referer");//如果直接获取图片资源在浏览器请求,这时不存在refererif (StringUtils.isEmpty(referer)) {request.getRequestDispatcher("/imgs/error.png").forward(request, response);return;}String domain = getDomain(referer);if (!domain.equals(domainName)) {request.getRequestDispatcher("/imgs/error.png").forward(request, response);return;}chain.doFilter(request, response);}/*** 获取url对应的域名** @param url* @return*/public String getDomain(String url) {String result = "";int j = 0, startIndex = 0, endIndex = 0;for (int i = 0; i < url.length(); i++) {if (url.charAt(i) == '/') {j++;if (j == 2)startIndex = i;else if (j == 3)endIndex = i;}}result = url.substring(startIndex + 1, endIndex);return result;}public void destroy() {}}
CSRF攻击
CSRF攻击产生的原因:
(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用也就是人们所知道的钓鱼网站。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
防御CSRF手段:
简单来说:CSRF就是模拟请求,比如我们可以使用图像验证码防止机器模拟请求(eg:有些网站在登录的时候让输入验证码,提示就是证明不是机器人)、使用Nginx实现限流(eg:限制资源1分钟只能请求多少次)、配置黑名单白名单等。还有就是在互联网电商项目中,有的将会话信息使用令牌方式保存,如何防止伪造token请求,比如黑客通过抓包分析得到token,然后使用令牌伪造请求支付、下单等核心业务。在互联网上绝对不可能防止黑客抓包分析获取token,但是在调用接口的时候我们要确保是本人操作,比如使用发送验证码方式或使用图像识别方法,所以在核心接口上一定要确保是本人操作,比如:修改密码、支付下单、转账等。
忘记密码漏洞
黑客使用抓包工具分析Http请求,在忘记密码找回时,需要发送一套短信验证码,如果验证码数字比较短的话,很容易使用暴力破解方式攻击破。
破解思路:假设加验证码为4位数字,1000-9999,使用Java程序HttpClient开启多线程调用找回密码接口,暴力破解生成的对应的4位以内验证码进行验证,如果一旦验证成功,破解ok。
防御手段:
①忘记密码验证码最好在6-8位,不要只是单纯数字,和其他字符混合(字母);
②一旦频繁调用接口验证时(eg:调用5次以上),应该使用图形验证码拦截,防止机器模拟;
③配置防止DDOS、限流、限制IP访问、使用黑名单和白名单机制,防御攻击;
漏洞描述:上传漏洞这个顾名思义,就是攻击者通过上传木马文件,直接得到WEBSHELL,危害等级超级高,现在的入侵中上传漏洞也是常见的漏洞。
导致该漏洞的原因在于没有对提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。比如上传一个可执行文件,里面是删除文件脚本,如果没有对上传文件校验,那么上传成功后获取到上传文件目录然后访问该可执行文件,则可以删除文件或者进行其他破坏操作;
漏洞危害:①可以得到WEBSHELL;②上传木马文件,可以导致系统瘫痪;③获取服务器数据并转读取到其他服务器;
如何防御上传文件漏掉?
①对文件格式限制,只允许某些格式上传;(eg:不允许上传exe、jsp、class等格式的)
②对文件格式进行校验,前端跟服务器都要进行校验(前端校验扩展名,服务器校验扩展名、Content_Type等)(eg:在上传图片的时候,通过文件流的方式知道它是一张图片而不能只根据后缀方式判断);
③静态资源服务器与动态服务器分开(eg:使用nginx+tomcat实现动态分离),将上传目录放到项目工程目录之外,当做静态资源文件路径,并且对文件的权限进行设定,禁止文件下的执行权限;
④服务器环境上硬盘不能做删除操作;
⑤服务器上不要有热部署功能;
最近比较忙,但是每篇文章都是自己学习完花时间费精力总结的,分享给身边爱学习的小伙伴一起交流成长


码字不易,喜欢的小伙伴可以留下足迹点个在看,分享给身边更多小伙伴


欢迎关注ITSK,每天进步一点点,我们追求在交流中收获成长和快乐





