网络安全:常见攻击手段及防御

随着互联网的发展,网络安全日益显的尤为重要,接下来介绍一下常见的web攻击手段。

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

是一种常见的攻击手段之一,攻击者主要通过嵌入恶意脚本程序,当用户打开网页时,脚本程序便在客户端的浏览器中执行,以盗取客户端cookie,用户名密码,下载执行病毒木马程序等。

例:某网站页面有个表单,表单名称为nick,用来向服务器提交昵称信息。value值是用户输入的昵称,比如你吃菜我喝汤,这是正常输入情况,如下:

<input type="text" name="nick" value="你吃菜我喝汤">

可是当用户输入的不是正常的字符串,而是脚本程序 如

"/><script>alert("你是煞笔")</script><!-"

这个表单就变成了:

<input type="text" name="nick" value=" "/><script>alert("你是煞笔")</script><!-" ">

这个时候input后面是不是多了一个script脚本程序,这个脚本程序弹出一个消息框,内容是"你是煞笔",当然这个示例的危害并不大,攻击的危害大小取决于用户植入的脚本。

防御手段:

     分析:XSS之所以能够发生,通过上诉示例中可以看出,用户通过输入代码完成攻击。以html为例,里面包含了大量的”尖括号“,”单引号“,”引号“之类的特殊字符。

   方案:通过上诉分析,我们可以对用户输入的数据进行html转译处理来进行防御。

<&lt;
>&gt;
'&amp;
"&quot;

                                                                                     HTML字符转译

如今又很多框架自身提供了转译功能,比如jstl,不需要开发人员进行二次开发

例:使用jstl转译

<c:out  value="${nick}"  escapeXml="true"></c:out>

只需要将escapeXml设置为true 就可以将变量nick的值进行转译输出。

2.CSRF攻击(Cross  Site Request forgery) 全称跨站请求伪造

攻击者盗用你在某网站的身份如cookie,以你的名义向该网站发送恶意请求。这个就比较可怕了,能够利用你的身份发邮件,发短信,甚至转账,盗取账号等。

原理图:

首先用户C访问站点A,然后通过信息验证完成登陆,此时产生cookie值保存在浏览器中,然后用户C在没有退出该网站的情况下,无意中访问了恶意的站点B,此时站点B的某个页面带着站点A的cookie 向站点A 发恶意请求,站点A根据请求所带的cookie,判断此请求为用户发送的,因此处理请求  从而完成欺骗。

用户C只需做两件事,CSRF攻击就发生了。

1.登陆某个网站没有退出。

2.   在没有退出的情况下(退出时,session会话结束cookie失效) 访问了其他的网站(恶意网站)

有时候所谓的恶意网站,很可能是一个有XSS漏洞的网站

防御手段:

(1)将cookie设置为HttpOnly

CSRF攻击很大程度上是利用浏览器的cookie,为了防止站内的XSS漏洞盗取cookie,需要在cookie中设置"HttpOnly"属性,这样就无法读取到cookie,避免了攻击者伪造cookie的情况出现。

在java的servlet的API中设置的代码如下:

response.setHeader("Set_Cookie","cookiename=cookievalue;HttpOnly");

(2)增加token

攻击者通过盗取cookie来完成安全验证,如果在请求中放入攻击者不能伪造的信息,该信息不在cookie中。

因此可以在htpp请求中加入参数token,并在服务端(可在拦截器中校验:session中的token与请求中的token是否一致)校验token,如果token不存在或者存在但不正确,则拒绝请求。

页面:

假设请求通过post方式提交,则可以在相应的表单中增加一个隐藏域:

<input type="hidden" name="_token" value=""/>

服务端:

token值在服务端生成,每次会话可以使用相同的token,会话过期token失效,攻击者无法获取token,也就无法伪造请求。

在session中添加token:

HttpSession session = request.getSession();
Object token = session.getAttribute("_token");
if(token==null || "".equals(token)){
   session.setAttribute("_tonken",UUID.randomUUID().toString());
}

(3)通过Referer识别

Http协议中,http头部有一个字段Referer,它记录了http请求的地址。CSRF通过其他网站发送伪造请求进行攻击,因此 可以通过校验该地址是否是该网站发出即可。

获取Http请求Referer:

String referer = request.getHeader("Referer");

 

  • 7
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值