前端攻击

参考 ---《白帽子讲web安全》

 

1:XSS(cross site script),跨站脚本攻击

 

1.1反射性XSS(将用户输入直接反射在浏览器上)

例子:

用户将参数直接输出在页面上:

<?php 
$input = $_GET("param");
echo "<div>".$input."</div>";
?>

正常情况下在URL输入:http://www.a.com/php?param=这是一个测试

将被渲染为:<div>这是一个测试</div>

但当URL输入:http://www.a.com/php?param=<script>alert(/xss/)</script>

将被渲染为:<div><script>alert(/xss/)</script></div>,并会弹出对话框

1.2存储型XSS(会把用户输入存储在服务端,具有很强的稳定性)

例子:

黑客写了一篇博客,其中包含了恶意的javacript代码。发表后,当其他用户查看该文章,浏览器将执行这段恶意代码。

1.3 DOM based XSS(通过修改页面DOM结点形成的XSS,其实也属于反射性XSS)

例子:

<div id="want_insert"></div>
<input type="text" id="text" value="">
<input type="button" value="write" onclick="test()">



function test(){
    var str = document.getElementById("text").value;
    document.getElementById("want_insert").innerHTML = "<a href = '"+str+"'>link</a>";
}

若输入:hello点击按钮将会渲染成:

<a href="hello">link</a>

但若输入:' οnclick=alert(/xss/) //

将会渲染成:

点击链接将会弹出XSS弹窗:

1.4:XSS的防御

1.4.1:HttpOnly(解决XSS中的cookie劫持)

可在set-cookie时标记HttpOnly,浏览器将禁止页面的javascript代码访问带有HttpOnly属性的cookie

1.4.2:输入检查(XSS filter)

过滤掉一些特殊字符如:<  >  '  "  <script>  javascript等敏感字符

1.4.3:输出检查

除了富文本的输出之外,在变量输出到html时,可以进行编码或转义来防御XSS

如:&变为&amp、<变为&lt、”变为&quot等

1.4.4:处理富文本

某些论坛需要用户提交自定义的html代码,称之为“富文本”

过滤富文本原则:

1:过滤包含“事件”的标签,如:<iframe>、<script>、<form>等

2:应使用白名单标签,只允许如:<a>、<img>、<div>等安全标签存在XSS

 

2:CSRF(cross site request forgery),跨站请求伪造

实例:

黑客在自己的钓鱼网站:www.a.com/csrf.hmtl放入一个img标签:

<img src = "http://blog.sohu.com/manage/entry.do?m=delete&id=1"/>

当其他用户访问该钓鱼网站,除了看到无法显示的图片之外,会发现id=1的搜狐博客被删除了。

事实上当访问www.a.com/csrf.hmtl时,图片标签向搜狐服务器发送了一个get请求,这个请求导致了搜狐上id为1的博客被删。

仅仅是让用户访问一个钓鱼网站,就能以该用户的身份在第三方网站完成一次操作。删除博客文章这个请求是伪造的,顾名跨站请求伪造。

原因:

浏览器持有的cookie分为两种:session cookie (浏览器关闭后该cookie就失效)和本地cookie(只有expires时间到了才会失效)

用户在A域登录,将会收到session cookie和本地cookie。用户在钓鱼网站(B域)通过<iframe>、<img>等访问A域,结果是:

若是IE浏览器则只能收到session cookie;若是Firefox则两者都能收到(firefox的默认策略就是允许发送第三方cookie)

所以在上述案例中,使用的是firefox浏览器,能成功发送用户认证的本地cookie给搜狐,最终导致CSRF成功。但若使用IE浏览器,就必须得让该用户先登录搜狐页面,使得session cookie有效再实施攻击。

CSRF防御:

1:验证码

2:referer check

如:论坛发帖的操作,正常情况下都得登录到后台,并提交发帖的表单,referer的值必然是发帖表单所在的页面。如果该值不是这个页面,甚至不同源,则极有可能发生CSRF攻击。

3:token

 

3:DDOS(Distributed Denial of Service),分布式拒绝服务

不法黑客组织通过控制服务器等资源,发动对包括国家骨干网络、重要网络设施、政企或个人网站在内的互联网上任一目标的攻击,致使目标服务器断网,最终停止提供服务。

打个比方,两家相互竞争的商铺,一家为了抢生意,雇佣大批人挤在对方商铺,赖着不走,让真正的顾客无法进入,或者和店员东拉西扯,妨碍正常工作,让对手错过真正的顾客,造成损失。DDoS攻击利用的就是这种思路。

DDoS攻击通过大量合法的请求占用大量网络资源,以达到使网络瘫痪的目的。

攻击方式可分为以下几种:

1、通过使网络过载来干扰甚至阻断正常的网络通讯;

2、通过向服务器提交大量请求,使服务器超负荷;

3、阻断某一用户访问服务器;

4、阻断某服务与特定系统或个人的通讯。

到目前为止,进行DDoS攻击的防御还是比较困难的。首先,这种攻击的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻击。不过这不等于我们就没有办法阻挡DDoS攻击,我们可以尽力来减少DDoS的攻击。

防御方法:

  1:确保服务器的系统文件是最新的版本,并及时更新系统补丁。

  2:关闭不必要的服务。

  3:限制同时打开的SYN半连接数目。

  4:缩短SYN半连接的time out 时间。

  5:正确设置防火墙

  禁止对主机的非开放服务的访问

  限制特定IP地址的访问

  启用防火墙的防DDoS的属性

  严格限制对外开放的服务器的向外访问

  运行端口映射程序祸端口扫描程序,要认真检查特权端口和非特权端口。

  6:认真检查网络设备和主机/服务器系统的日志。只要日志出现漏洞或是时间变更,那这台机器就可能遭到了攻击。

  7:限制在防火墙外与网络文件共享。这样会给黑客截取系统文件的机会,主机的信息暴露给黑客,无疑是给了对方入侵的机会。

  8:路由器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2. 节流与防抖是针对事件频繁触发而造成性能问题的解决方案。节流是指在一定时间间隔内只执行一次事件回调函数,而防抖是指在事件触发后一定时间内没有再次触发才执行事件回调函数。下面是具体的实现代码: 节流实现代码: ```javascript function throttle(fn, delay) { let timer = null; return function() { const context = this; const args = arguments; if (!timer) { timer = setTimeout(function() { fn.apply(context, args); timer = null; }, delay); } }; } ``` 防抖实现代码: ```javascript function debounce(fn, delay) { let timer = null; return function() { const context = this; const args = arguments; clearTimeout(timer); timer = setTimeout(function() { fn.apply(context, args); }, delay); }; } ``` 3. 设计模式是指在软件开发过程中,为了解决某一类问题而总结出的一套通用的解决方案。它可以提高代码的重用性、可维护性和可扩展性。常见的前端设计模式有:单例模式、观察者模式、装饰器模式、工厂模式、策略模式、适配器模式等。 4. 前端常见的设计模式包括: - 单例模式 - 观察者模式 - 装饰器模式 - 工厂模式 - 策略模式 - 适配器模式 - 命令模式 - 代理模式 - 模板方法模式 5. 前端攻击包括:XSS攻击、CSRF攻击、DDoS攻击、SQL注入攻击、网络钓鱼等。防御方案包括:输入校验、防范跨站攻击、使用安全的密码、加强用户身份验证、使用HTTPS、使用CDN等。 6. 利用img进行XSS攻击的方式是通过构造img的src属性,将恶意脚本代码放在url中,由于img标签的src属性不会执行JavaScript代码,因此攻击者需要通过构造url的方式来实现XSS攻击。 7. 数据链路层的主要功能包括:物理寻址、差错控制、帧同步、流量控制、介质访问控制等。 8. 设计批处理多道系统时,首先要考虑的是如何对任务进行调度和分配,以及如何利用多道技术提高系统的资源利用率和吞吐量。 9. Virtual DOM的优势在于它可以通过比较前后两个虚拟DOM树的差异来最小化页面重绘的操作,从而提高页面的性能和渲染速度。 10. 文件指纹是在文件名后添加一串hash值来标识文件的唯一性,一般用于浏览器缓存控制和版本管理。可以通过在webpack的output选项中设置filename和chunkFilename来生成文件指纹。 11. 函数柯里化是指将一个接受多个参数的函数转换成一系列接受单个参数的函数的过程。下面是函数柯里化的实现代码: ```javascript function curry(fn) { const len = fn.length; return function curried(...args) { if (args.length >= len) { return fn.apply(this, args); } else { return function(...args2) { return curried.apply(this, args.concat(args2)); }; } }; } ``` 12. JS模拟new操作符的实现可以通过以下步骤实现: - 创建一个新对象 - 将构造函数的原型赋值给新对象的__proto__属性 - 执行构造函数,将this指向新对象 - 如果构造函数有返回值且返回值是对象,则返回该对象,否则返回新对象 以下是代码实现: ```javascript function myNew(constructor, ...args) { const obj = Object.create(constructor.prototype); const result = constructor.apply(obj, args); return result instanceof Object ? result : obj; } ``` 13. V8引擎的垃圾回收机制主要是基于分代式垃圾回收算法和增量式垃圾回收算法。分代式垃圾回收算法将内存分为新生代和老生代两个部分,分别采用不同的垃圾回收策略,新生代采用Scavenge算法,老生代采用Mark-Sweep和Mark-Compact算法。增量式垃圾回收算法则是在垃圾回收过程中采用增量式的方式来进行,避免长时间的阻塞。 14. AMD和CMD规范的区别在于AMD采用异步加载模块的方式,即define函数需要在模块加载完成后再执行,而CMD则采用同步加载模块的方式,即define函数可以在模块定义时就执行。因此,AMD适用于浏览器环境,而CMD适用于Node.js环境。 15. 函数式编程是一种编程范式,它主要关注函数的运算和组合,将函数看作是一等公民,强调使用纯函数和不可变数据结构来实现程序的逻辑。函数式编程可以提高程序的可读性、可维护性和可测试性,适用于数据处理、异步编程等领域。常见的函数式编程语言有Haskell、Clojure等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值