浅谈WEB 安全问题

WEB安全问题,是不可忽视的,不管对于前端开发人员还是后台开发人员,或者其他。写这篇文章的意义,在于,分享下自己这5年开发,所接触的或者所了解的安全知识。

前些天,另一个团队的后台,突然问我,黄工,如何处理应用统计点击使用量,防止机器暴力防刷使用量的问题,加上去年底遇到的处理爬虫问题,扫描软件扫出的安全漏洞。因为身处公安行业,所以安全性方面,还是被重视的,所以想着记录分享一下。

xss攻击

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容

前端的角度来处理xss攻击

  1. xss模块 用法:在提交文本框的时候添加。
  2. html中对于常见字符编码进行转换,如 ‘’< ‘’换为‘’&lt‘’
  3. 勿用eval,如
<script>eval(String.fromCharCode(97,108,101,114,116,40,47,120,115,115,47,41));</script>
其作用相当于
<script>alert(/xss/)</script>

后端的角度来处理xss攻击(此处语言为Node.js)、

  1. node-xss 模块 用法:在接收前端传递的参数时候使用,如xss(req.body)
  2. 对于常见字符编码进行转换 如 ‘’< ‘’换为‘’&lt‘’
  3. 响应头中设置 X-XSS-Protection: 1; mode=block ,可使用 helmet(注:如果没添加,扫描漏洞软件会扫出

CSRF攻击

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

  1. 使用JWT认证, 即前后端通讯,要携带生成的Token.

数据安全问题

在一些场景中,数据是很私密很重要,如即时通讯的聊天内容,如公安行业的一些重要会议。这些都是不允许明文传输的。 即时在登录的时候,前端输入的密码在前端也需要加密,在后台解密,或者其他加密手段。

例如:AES加密算法

AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB

例子:

前端加密:

function encrypt(word){
    var publickey = "46cc793c53dc4511"  //秘钥,长度取决于ase的类型
    var key = CryptoJS.enc.Utf8.parse();     

    var srcs = CryptoJS.enc.Utf8.parse(word);

    var encrypted = CryptoJS.AES.encrypt(srcs, key, {

        mode: CryptoJS.mode.ECB,

        padding: CryptoJS.pad.Pkcs7   //和后端pkcs7 一致

    });

    return encrypted.toString();

}


console.log( encrypt('你好') )

node.js作为后端解密

const crypto = require('crypto');


let decrypt=(data)=>{

    let key = '46cc793c53dc4511';   //长度取决于aes的类型

    let decipher = crypto.createDecipheriv('aes-128-ecb', key,"");

    const buf1 = new Buffer(data,"base64").toString('hex');

    let decrypted = decipher.update(buf1, 'hex', 'utf8');

    decrypted += decipher.final('utf8');

    return decrypted;

  };


console.log( decrypt("6RJhDqqcXtghRvwUFi6VRA==") );

爬虫

在去年的一个政府项目中,有个投票功能,根据ip进行投票,一天只能投一票,发现有几个个团队进行了伪造ip,用python编写脚本,运用爬虫进行刷票,并发票达到千万级别,导致我们的平台的无法正常运行。

作为前端负责人,参与了方案讨论。

  1. 投票的时候开启验证码验证,
  2. 对数据传输进行加密处理,如AES

此两点措施,让刷票行为的成本和难度大大增加,所以在后续的投票时间里,没有发现刷票行为。

总结

多看,多写,多思考

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的海滨体育馆管理系统,源码+数据库+毕业论文+视频演示 本基于Spring Boot的海滨体育馆管理系统设计目标是实现海滨体育馆的信息化管理,提高管理效率,使得海滨体育馆管理工作规范化、高效化。 本文重点阐述了海滨体育馆管理系统的开发过程,以实际运用为开发背景,基于Spring Boot框架,运用了Java技术和MySQL作为系统数据库进行开发,充分保证系统的安全性和稳定性。本系统界面良好,操作简单方便,通过系统概述、系统分析、系统设计、数据库设计、系统测试这几个部分,详细的说明了系统的开发过程,最后并对整个开发过程进行了总结,实现了海滨体育馆相关信息管理的重要功能。 本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高海滨体育馆管理效率。 关键词:海滨体育馆管理,Java技术,MySQL数据库,Spring Boot框架 本基于Spring Boot的海滨体育馆管理系统主要实现了管理员功能模块和学生功能模块两大部分,这两大功能模块分别实现的功能如下: (1)管理员功能模块 管理员登录后可对系统进行全面管理操作,包括个人中心、学生管理、器材管理、器材借出管理、器材归还管理、器材分类管理、校队签到管理、进入登记管理、离开登记管理、活动预约管理、灯光保修管理、体育论坛以及系统管理。 (2)学生功能模块 学生在系统前台可查看系统信息,包括首页、器材、体育论坛以及体育资讯等,没有账号的学生可进行注册操作,注册登录后主要功能模块包括个人中心、器材管理、器材借出管理、器材归还管理、校队签到管理、进入登记管理、离开登记管理、活动预约管理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值