一.Web 安全常见攻击手段

  XSS(跨站脚本攻击)

  SQL 注入

  CSRF(跨站请求伪造)

  上传漏洞

  DDoS(分布式拒绝服务攻击)等

二.攻击手段原理及解决方案

  1.XSS攻击

    原理:XSS 攻击是页面被注入了恶意的代码,而浏览器执行了恶意的代码。

    分类:反射型XSS,DOM型XSS,以及存储型XSS

    简单案例

      新建一个Spring Boot项目,添加Thymeleaf模块和web模块,编写两个非常简单的html如下图

      

      

      再编写一个控制器

@Controller
public class Mycontroller {
@RequestMapping("/test1")
public String test1(){
return "test1";
}
@RequestMapping("/test2")
public String test2(){
return "test2";
}
@RequestMapping("/testServlet")
public String myServlet(HttpServletRequest request , HttpServletResponse response){
String str = request.getParameter("name");
request.setAttribute("name",str);
try {
request.getRequestDispatcher("test2").forward(request,response);
} catch (Exception e) {
e.printStackTrace();
}
return "test2";
}

      用火狐浏览器打开(注意:谷歌浏览器默认禁止了script提交,会将网页拦截)

      

      点击提交后,页面弹出了弹出框,而没有在页面中显示数据

      

    危害

      上面案例只是测试,在实际中,恶意的XSS攻击往往还会:

        窃取客户端Cookies或进行钓鱼欺骗

        控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

        盗窃企业重要的具有商业价值的资料

        强制发送电子邮件

        控制受害者机器向其它网站发起攻击等

    解决方案

      1.对用户输入的信息进行处理,将HTML代码进行转义等。例如模板引擎自带的转义,将上述test2页面中

th:utext="${name}"

      改为

th:text="${name}"

      或者使用commons-lang的jar包里带有的StringEscapeUtils方法。

      甚至可以自己编写一个工具类,例如

//html标签转义成自定义字符
function htmlEscape(sHtml) {
return sHtml.replace(/[<>&"]/g,function(c){
return {'<':'&lt;','>':'&gt;','&':'&amp;','"':'&quot;'}[c];
});
}

      2.使用 UTF-8 为默认的字符编码以及设置 content 为 text/html 等。

      3.对重要的cookie设置httpOnly, 防止客户端通过document.cookie读取cookie。

      4.创建参数拦截filter类过滤器,对每次的请求拦截,将数据转义后再进数据库中。

      ......

  2.SQL注入

    原理:将一些特殊的参数输入到后台,而这些输入大都是SQL语法里的一些组合,执行这些恶意的输入会导致非法数据侵入数据库或取出非法的数据。

    案例:select count(1) from test where id = xxx or 1 = 1  本来只需要统计id为xxx的数据的个数,但是后面的1 = 1永远为true,导致该查询语句会查询所有的id。

    危害

      数据库信息泄漏:数据库中存放的用户的隐私信息的泄露

      网页篡改:通过操作数据库对特定网页进行篡改

      网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击

      数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改

      服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统

      破坏硬盘数据,瘫痪全系统等

    解决方案

      1.检查用户输入的合法性,尽量的限制用户输入特殊的符号,确信输入的内容只包含合法的数据。

      2.使用过滤(对关键字符进行转义)与编码统一,并使用参数化的sql语句。

      3.使用预编译等较安全的方式,例如PreparedStatement。

      4.使用加密方式加密输入的数据,使加密后的数据与数据库中的数据进行比较。

  3.CSRF攻击

    原理:(用如下案例解释)

      1. 用户打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

      2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

      3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

      4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问网站A;

      5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户的Cookie信息和权限处理该请求,导致来自网站B的恶意代码被执行。

    解决方案:(这里有多个方案)

      方案一.验证 HTTP Referer 字段

        根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址,若来源地址的不对,则拒绝请求。(这种方式存在一些问题,详情可以参考IBM中对CSRF的一些描述,具体链接

      方案二.使用验证码

        每一个重要的post提交页面,使用一个验证码,因为第三方网站是无法获得验证码的。还有使用手机验证码,比如转账是使用的手机验证码。

      方案三.在请求地址中添加 token 并验证

        CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

      方案四.在 HTTP 头中自定义属性并验证

        这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

      上面各种解决方案各有优势,也都有各自的缺陷。因此,实际情况中应选择最合适的策略,这样才能把 CSRF 的危害降到最低。

  4.文件上传漏洞

    原理:Web程序没有对上传文件的格式进行严格过滤 , 还有一部分是攻击者通过 Web服务器的解析漏洞来突破Web应用程序的防护,导致恶意的可执行的脚本文件(病毒、木马等)被上传,并获得了执行服务端命令的权限。

    案例:这里我看了他人的一遍博客https://www.cnblogs.com/yuxiaole/p/9293472.html,非常简单直观。

    危害:攻击者甚至能够获取服务端的部分控制权,危害非常大。

    解决方案

      1.在前端和后台都要限制文件上传类型,例如在前端中做如下限制

#前端脚本检测,只允许上传 .jpg格式的文件
<script type="text/javascript">
function selectFile(fnUpload) {
var filename = fnUpload.value;
var mime = filename.toLowerCase().substr(filename.lastIndexOf("."));
if(mime!=".jpg")
{
alert("请选择jpg格式的照片上传");
fnUpload.outerHTML=fnUpload.outerHTML;
}
}
</script>

      2.对上传的文件在服务器上存储时进行重命名

      3.检查上传文件的类型和大小

      4.上传文件要保存的文件名和目录名由系统根据时间生成,不允许用户自定义,并且文件权限应该定义好

  5.DDoS攻击

    原理:借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,由于每个计算机中的程序都将通过向目标发送请求并要获取响应,过多的请求可能会导致目标服务器或网络溢出容量,从而导致对其他正常流量的拒绝服务。

    解决方案

      1.部署负载均衡

      2.尽量避免 NAT 的使用

      3.充足的网络带宽保证

      4.把网站做成静态页面

      5.做备份网站

      6.配置硬件防火墙等

      ......

互联网安全架构之常见的Web攻击手段及解决办法的更多相关文章

  1. 常见的Web攻击手段,拿捏了!

    大家好,我是小菜. 一个希望能够成为 吹着牛X谈架构 的男人!如果你也想成为我想成为的人,不然点个关注做个伴,让小菜不再孤单! 本文主要介绍 互联网中常见的 Web 攻击手段 如有需要,可以参考 如有 ...

  2. 安全|常见的Web攻击手段之CSRF攻击

    对于常规的Web攻击手段,如XSS.CRSF.SQL注入.(常规的不包括文件上传漏洞.DDoS攻击)等,防范措施相对来说比较容易,对症下药即可,比如XSS的防范需要转义掉输入的尖括号,防止CRSF攻击 ...

  3. 常见的web攻击手段

    XSS:跨站脚本攻击 -典型实例为: 当用户在表达输入一段数据后,提交给服务端进行持久化.如果此用户输入的是一段脚本语言,而服务端 用户输入的数据没有经过转码.校验等就存入了数据库,在其他页面需要展示 ...

  4. 常见的web攻击手段总结

    xxs攻击(跨站脚本攻击) 攻击者在网页中嵌入恶意脚本程序,当用户打开该网页时脚本程序便在浏览器上执行,盗取客户端的cookie.用户名密码.下载执行病毒木马程 序 解决: 我们可以对用户输入的数据进 ...

  5. 简单总结几种常见web攻击手段及其防御方式

    web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...

  6. 简单地总结几种常见web攻击手段及其防御方式

    web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...

  7. 几种常见web攻击手段及其防御方式

    XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS web安全系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 XSS 概念 全称是跨站脚本攻击(Cross ...

  8. 总结几种常见web攻击手段及其防御方式

    本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS web安全系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 ...

  9. C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路

    C#不用union,而是有更好的方式实现   用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...

随机推荐

  1. 阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架

    service能供成功的调用到service对象就算是整合成功 如果能把生成的代理对象也存大IOC的容器中.那么ServiceImpl就可以拿到这个对象 做一个注入,然后就可以调用代理对象的查询数据库 ...

  2. Python 导入文件问题

    1.同级目录下调用 若在程序 testone.py 中导入模块 testtwo.py , 则直接使用 [import testtwo 或 from testtwo  import *] 2.调用子目录 ...

  3. JavaScript基础入门10

    目录 JavaScript 基础入门10 正则表达式 为什么使用正则表达式? 正则表达式的应用场景 如何创建一个正则表达式 基础语法 具有特殊意义的转义字符 量词 字符类 贪婪模式 练习 邮箱验证 中 ...

  4. docker中tomcat日志输出自定义

    一,默认tomcat日志配置文件 /data/tomcat/conf/logging.properties 1,修改tomcat/conf下的logging.properties [root@harb ...

  5. MathType 6.0中MT Extra(TrueType)问题

    问题 MathType 6.0中MT Extra(TrueType)字体问题在打开MathType6.0时,有时会提示MathType需要安装一个较新版本的MT Extra(TrueType)字体,这 ...

  6. 技术简历写这么写,才能得到BAT面试官们的青睐

    公众号[程序员江湖] 作者陆小凤,985 软件硕士,阿里 Java 研发工程师,在技术校园招聘.自学编程.计算机考研等方面有丰富经验和独到见解,目前致力于分享程序员干货和学习经验,同时热衷于分享作为程 ...

  7. zabbix支持的主要监控方式

    一.zabbix支持的主要监控方式: zabbix主要Agent,Trapper,SNMP,JMX,IPMI这几种监控方式,本文章主要通过监控理论和实际操作测试等方式来简单介绍这几种方式的监控原理和优 ...

  8. 【DSP开发】C6678的中断控制器

    分两层,一层是每个core内部的中断控制器,这个叫interrupt controller,简写intc:一层是整个芯片的,属于芯片级的,在每个core的外面,这个叫chip-level interr ...

  9. JAVA -数据类型与表达式---数据类型转换

    数据类型转换技术 Java中,数据转换的方式有三种:*赋值类型转换*提升类型转换*强制类型转换 1.赋值类型转换 当需要将一个类型的值赋给另一种类型的变量时,该值将被转换为新类型的值,此时就发生了赋值 ...

  10. hdfs(分布式文件系统)优缺点

    hdfs(分布式文件系统) 优点 支持超大文件 支持超大文件.超大文件在这里指的是几百M,几百GB,甚至几TB大小的文件.一般来说hadoop的文件系统会存储TB级别或者PB级别的数据.所以在企业的应 ...