当前位置: 首页 > news >正文

web运行时安全

1.输入验证 

对传递的数据的格式、长度、类型(前端和后端都要)进行校验。

对黑白名单校验:比如前端传递了一个用户名,可以搜索该用户是否在白名单或者黑名单列表。

针对黑名单校验,比如:

// 手机号验证码登录的时候,需要check一下手机号
async sendAuthCode(phone){if(!_.isString(v))return falseconst phone = phone.replace(/[a-zA-Z]/gi,'')if(phone.length!==11) return falseconst forbidden = ['170','171','165','167']const isR = forbidden.some(item=>phone.startsWith(item))if(isR)return false
}

2.身份认证与授权 

身份认证(属于node后端责任),核心思想:后端A向第三方服务B端发起请求的时候在请求头添加一个3个字段:
projectKey,appKey,authorization,

其中前两个key是A和B商量好的一串码(比如dfs3290sdf)

authorization是通过给param参数转成md5,混合一堆content-type,uri之类的配合B提供的密钥secretKey进行hmac编码,生成签名signature。

然后B端根据相反的规则解析这三个字段,与自己手上的projectKey,appKey,secretKey进行对比

上代码:

//  伪代码const Authorization = this.getAuthorization('POST', reqParams, this.contentType, this.uri, date, this.secretKey, this.accessKey);const headers = {'Content-Type': this.contentType,'Authorization': Authorization,'projectKey': this.projectKey,'appKey': this.appKey,'Date': date,'X-Forwarded-For': '192.168.42.94'}const options = {method: 'POST',headers};
const res = await this.Fetch(url, options, param);getAuthorization(method, params, contentType, uri, date, secretKey, accessKey): string {const md5 = this.getContentMD5(params);const constToSign = method + '\n' + md5 + '\n' + contentType + '\n' + date + '\n' + uri;// 将constToSign施行utf-8转换const utf8Data = Buffer.from(constToSign, 'utf8');// 使用HMAC-SHA1和密钥进行编码const hmac = crypto.createHmac('sha1', secretKey);hmac.update(utf8Data);const encodedData = hmac.digest();// 使用Base64进行最后的编码const signature = encodedData.toString('base64');return `${accessKey}:${signature}`;}getContentMD5(params) {let contentMD5 = '';const jsonString = qs.stringify(params);contentMD5 = crypto.createHash('md5').update(jsonString).digest('base64')return contentMD5;
}

3.安全配置 

4.错误处理与日志记录 

5.加密和解密 

6.输入过滤 

7.限制访问 

8.应用程序安全更新 

9.规范编码 

10.安全审计 

相关文章:

  • 【并发编程】线程基础知识
  • 我是如何写作的?
  • 深入理解分库、分表、分库分表
  • C#学习总结
  • 大数据技术(一)
  • Visual Studio C++项目远程断点调试客户现场程序方法
  • 蓝桥杯(3.1)
  • 李沐动手学习深度学习——4.2练习
  • 面试数据库篇(mysql)- 06覆盖索引
  • 一句话讲清楚数据库中事务的隔离级别(通俗易懂版)
  • 贪心 Leetcode 53 最大子数组和
  • Pycharm的下载安装与汉化
  • 【Mybatis】多表映射 第二期
  • 德人合科技 | 天锐绿盾终端安全管理系统
  • GO数组切片
  • JS 中的深拷贝与浅拷贝
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • axios 和 cookie 的那些事
  • cookie和session
  • Objective-C 中关联引用的概念
  • Redis 中的布隆过滤器
  • scrapy学习之路4(itemloder的使用)
  • 经典排序算法及其 Java 实现
  • 如何利用MongoDB打造TOP榜小程序
  • 与 ConTeXt MkIV 官方文档的接驳
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • %check_box% in rails :coditions={:has_many , :through}
  • (03)光刻——半导体电路的绘制
  • (42)STM32——LCD显示屏实验笔记
  • (c语言)strcpy函数用法
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (十六)Flask之蓝图
  • .net core 6 redis操作类
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net 获取url的方法
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net经典笔试题
  • .NET企业级应用架构设计系列之技术选型
  • .NET项目中存在多个web.config文件时的加载顺序
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @PreAuthorize注解
  • @staticmethod和@classmethod的作用与区别
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • @Valid和@NotNull字段校验使用
  • [ABC294Ex] K-Coloring
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [javaee基础] 常见的javaweb笔试选择题含答案
  • [k8s系列]:kubernetes·概念入门
  • [Luogu 3958] NOIP2017 D2T1 奶酪