整理关于web项目如何防止CSRF和XSS攻击的方法

整理关于web项目如何防止CSRF和XSS攻击的方法

1 了解CSRF的定义

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。例如:一个网站用户Bob可能正在浏览聊天论坛,而同时另一个用户Alice也在此论坛中,并且后者刚刚发布了一个具有Bob银行链接的图片消息。设想一下,Alice编写了一个在Bob的银行站点上进行取款的form提交的链接,并将此链接作为图片src。如果Bob的银行在cookie中保存他的授权信息,并且此cookie没有过期,那么当Bob的浏览器尝试装载图片时将提交这个取款form和他的cookie,这样在没经Bob同意的情况下便授权了这次事务。

2 在项目中如何解决csrf的攻击

我们以用户登录这段代码来举例说明:

2.1 首先项目里面引入CSRFTokenManager.java,这个里面主要是产生一个csrftoken session的代码。

整理关于web项目如何防止CSRF和XSS攻击的方法

2.2 在用户进入项目,还没有跳转到登录页面之前,我们通过CSRFTokenManager代码产生一个token,然后把它传入登录页面,给它定义成csrf。

整理关于web项目如何防止CSRF和XSS攻击的方法

2.3 在登录页面里面,通过隐藏域来获取刚刚传入的csrf,这样当用户提交form表单的时候,这里的csrf就会一起被提交到后台的代码。

整理关于web项目如何防止CSRF和XSS攻击的方法

2.4 在后台代码里面,我们通过页面传入的token和已经产生的token session进行对比,如果两个相同,那么这些操作就认为是用户自己在操作,如果页面传入的和产生的token不相同那么这就是其他人员通过模拟用户进行了这样的操作,那么我们就要对它进行处理,让它跳转到登录页面。

整理关于web项目如何防止CSRF和XSS攻击的方法

3 了解XSS的定义

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句,如:dvbbs的showerror.asp存在的跨站漏洞。另一类则是来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。

4 在项目中如何解决XSS的攻击

4.1 首先项目导入XSSStringEncoder.java,这个里面主要就是把传入字符串的特殊字符进行html转码,例如> < ) ( ” ‘ % ; & +,这些特殊字符很有可能就是被注入的代码。

整理关于web项目如何防止CSRF和XSS攻击的方法

4.2 对每一个代码传入的字符串调用这里面的encodeXSSString进行转码,然后把转码后的字符串返回回来

整理关于web项目如何防止CSRF和XSS攻击的方法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113685.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 包含本地图片请点击word转存怎么解决_为什么会出现跨域问题

    包含本地图片请点击word转存怎么解决_为什么会出现跨域问题网页中引入这两个js<scripttype=”text/javascript”src=”../libs/jquery/fileSaver.js”></script><scripttype=”text/javascript”src=”../libs/jquery/jquery.wordexport.js”></script>自定义JS文…

    2022年8月31日
    4
  • Ubuntu终端打开文件及查看目录「建议收藏」

    Ubuntu终端打开文件及查看目录「建议收藏」方法/步骤 1ctrl+alt+t,调出终端。———— 要去某个目录,用cd 例如:cd/home/yang/下载/ 在视图中,后面还有一个文件夹,我记不住,就按tab键一下。就自动出来了。 如果该文件夹下东西比较多,你记不住,那就多按两次tab,就会出现可以进入的文件夹。在这里我要进入【下载】文件夹里。————- …

    2022年10月11日
    2
  • 如何在linux中安装VMwareTools

    如何在linux中安装VMwareToolsvmwaretools是虚拟机VMwareWorkstation自带的一款工具,它的作用就是使用户可以从物理主机直接往虚拟机里面拖文件。如果不安装它,我们是无法进行虚拟机和物理机之间的文件传输的,当然它的功效不止于此,平时我们操作虚拟机的时候,在物理机和虚拟机之间必须使用CTRL切换,如果安装之后我们就不必使用键盘切换,直接便可退出,使得虚拟机真正成为了电脑的一部分,那么这么神奇的vmware

    2022年5月25日
    38
  • SpringCloud原理–FeignClient

    SpringCloud原理–FeignClient本文介绍SpringCloud的FeignClient的原理。Feign服务调用的工作原理可以总结为以下几个步骤首先通过@EnableFeignCleints注解开启FeignCleint。根据Feign的规则实现接口,添加@FeignCleint注解。程序启动后,会扫描所有有@FeignCleint的类,并将这些信息注入到ioc容器中。注入时从FeignClientFactoryBean.class获取FeignClient当接口的方法被调用时,通过jdk的代理,来生

    2025年8月29日
    4
  • 一分钟制作U盘版BT3 – 有图滴儿 bt3破解教程

    一分钟制作U盘版BT3 – 有图滴儿 bt3破解教程

    2021年12月10日
    46
  • python的flask框架_flask框架实例

    python的flask框架_flask框架实例Flask是一个Python编写的Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务。本文参考自Flask官方文档,英文不好的同学也可以参考中文文档1.安装flaskpipinstallflask2.简单上手一个最小的Flask应用如下:fromflaskimportFlaskapp=Flask(__name__)@app.route(‘/’)defhello_world():return’HelloWorld’if__na

    2022年10月9日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号