Skip to content

目标:加解密数据 + 压缩混淆代码

openssl + 非对称加密-javascript

代码压缩混淆

crypto-js

jsencrypt

Web Crypto API Crypto-掘金

Web 安全

web client 中如何安全传输敏感信息

在 Web 开发中,为了安全传输敏感信息,可以采取以下措施:

  1. 使用 HTTPS 协议:确保网站使用加密连接,通过 SSL/TLS 加密传输数据,防止信息在传输过程中被窃取或篡改。

    • Strict-Transport-Security 响应头部字段告诉浏览器只能使用 HTTPS 访问站点
  2. 避免明文传输敏感信息:不要在 URL 参数中或者 GET 请求中传输敏感信息,避免在页面上明文展示敏感数据。

  3. 数据加密:对敏感数据进行加密处理,确保在服务器端存储和传输数据时是加密的状态,例如使用加密算法对密码进行加密存储。(非对称加密)

  4. 防止跨站脚本攻击(Cross-site scripting,XSS) 攻击:有效防范跨站脚本攻击,避免恶意脚本获取用户输入的敏感信息并发送到其他服务器。

    • 服务端和客户端都可以配置 Content Security Policy (CSP) 内容安全策略减轻 XSS 攻击。
  5. 防止 CSRF 攻击:通过 CSRF token 来防御跨站请求伪造攻击,确保请求来源合法。

  6. 安全的 Cookie 设置:使用 Secure 和 HttpOnly 标志来设置 Cookie,防止通过 XSS 攻击和脚本访问敏感信息。

  7. 访问控制:限制敏感页面的访问权限,确保只有授权用户可以访问敏感信息。

  8. 点击劫持保护

网络攻击

从客户端接收到得 HTTP 请求的全部内容都可以在客户端任意篡改。

在 HTTP 请求报文内容加载攻击代码就能发起对 Web 应用的攻击,通过 URL 查询字段、表单、HTTP 首部、Cookie 等途径把攻击代码传入,若 Web 应用存在安全漏洞则会被攻击者窃取内部信息或管理权限。

攻击模式

针对 Web 应用的攻击模式有两类

  • 主动攻击:直接针对服务器上的资源进行攻击,攻击者需要能访问服务器资源,代表有:
    • SQL 注入:针对 Web 应用的数据库攻击
    • OS 命令注入:通过 Web 应用执行非法的操作系统命令
  • 被动攻击:利用圈套策略执行攻击代码,攻击者在页面设置陷阱,用户触发陷阱并把含有攻击代码的 HTTP 请求发送给 Web 应用,执行攻击代码。代表有:
    • 跨站脚本攻击
    • 跨站点请求伪造

跨站脚本攻击

跨站脚本攻击(XSS, Cross Site Scripting):网站(HTML 文档)被注入了恶意脚本(element.innerHTML 插入<script> 标签);

通过 url、表单提交触发

分类

  反射型   储存型   DOM型

解决方法

  1、内容安全策略:script-self   2、符号转义:<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等转义;

跨站请求伪造CSRF

一个典型的CSRF攻击有着如下的流程:

  • 受害者登录a.com,并保留了登录凭证(Cookie)。
  • 攻击者引诱受害者访问了b.com。
  • b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的 Cookie
  • a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
  • a.com以受害者的名义执行了act=xx。
  • 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。

解决方法:

  1. 检查请求头部中的 referer、origin 字段;
  2. 添加校验Token;
  3. 通过输入验证码校验合法请求;
  4. cookie 配置 sameSite 属性

提高安全性

输入验证、输出转义

内容安全策略

CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行

  • CSP 的主要目的是防止跨站脚本攻击(XSS)。

  • 启用 CSP 的两种方法:

    1. HTTP 响应头信息的 Content-Security-Policy 的字段;Content-Security-Policy: <policy-directive>; <policy-directive>

    2. HTML 文件的 <meta> 标签;

      html
      <meta
        http-equiv="Content-Security-Policy"
        content="default-src 'self'; img-src https://*; child-src 'none';" />
  • script-srcobject-src 是必设的,除非设置了default-src。 因为攻击者只要能注入脚本,其他限制都可以规避。而object-src必设是因为 Flash 里面可以执行外部脚本;

json
Content-Security-Policy: script-src 'self'; object-src 'none';
style-src cdn.example.org third-party.org; child-src https:

参考:Content Security Policy 入门教程-阮一峰

加密算法

  1. 对称加密

    • DES、AES
    • 由于密钥规模较小,DES 现在被认为是不安全的。
  2. 非对称加密

    • RSA、DSA
    • RSA加密对于其加密的明文的长度有限制
    • jsencrypt RSA Javascript encryption,只能加密少量数据
    • node-rsa
    • react-native-crypto