1、数据验证

4.1、输入数据验证安全规则

1

数据验证必须放在服务器端进行。

2

至少对输入数据的数据类型、数据范围和数据长度进行验证。

3

所有来自不可信数据源(比如网络、用户命令、数据库和文件系统等)的数据都要进行有效验证(参考11.7 ESAPI方案)。

4

来自客户端的所有参数的数据都要进行验证,比如HTTP header的键值对。

5

数据验证不通过时应默认拒绝处理该请求。

6

应尽可能地使用“白名单”而非“黑名单”的方式对数据进行验证。

4.2、输出数据编码安全规则

数据编码必须放在服务器端进行。

系统应依据上下文环境对自非信任域的数据进行输出编码后再返回给客户端,html编码就是一个很好的例子,但不适用于所有上下文环境,详情请参考【反射型、存储型XSS安全规则】。

 

4.3、反射型、存储型XSS安全规则

将用户数据输出到html body某处时,必须经过html转义,比如:

<body>...【用户数据】...</body>

<div>...【用户数据】...</div>

以及其它普通的html标签,比如p, b, td等等。

ESAPI sample:

String safe =

ESAPI.encoder().encodeForHTML( request.getParameter( "input" ) );

将用户数据输出到html 标签的属性时,必须经过标签属性的转义。

注意:不包含条规则定义的安全上下文以外,其它上下文都是无法安全地转义的,应避免出现,比如:

<script>...【用户数据】...</script>  //直接输出到js标签内

<!--...【用户数据】...-->           //直接输出到注释内

<div ... 【用户数据】...=test />     //直接输出到标签属性名

<..【用户数据】... href="/test" />   //作为标签名使用

<style>...【用户数据】...</style>    //直接输出到CSS

……

 

4.4DOM型XSS安全规则

简要描述

一种基于DOM的跨站,这是客户端脚本自身解析不正确导致的安全问题。

解决方案

在输出到DOM前必须确定插入HTML的位置,根据上面的反射型、存储型XSS安全规则进行过滤。

备注

纯DOM跨站,可以不用与服务器发生数据交互。

4.5、Flash型XSS安全规则

简要描述

通过Flash执行javascript

解决方案

把Flash的参数”allowScriptAccess”置为”never”;

把Flash的参数”allowNetworking”置为”none”或”internal”;

使用navigateToURL(as3)或getURL(as2)时必须验证link

参数,不得含有伪协议(详见XSS安全规则)

如果Flash中有使用ExternalInterface.call,必须过滤该函数的所有参数(详见XSS安全规则)

如果Flash中有使用ExternalInterface.addCallback,必须过滤该函数的第一个参数(详见XSS安全规则)

备注

注意设置网站根目录下的crossdomain.xml

4.6、SQL注入

简要描述

当应用程序使用用户输入数据来构造动态sql语句以访问数据库时,就会发生sql注入攻击。

解决方案

1、  使用参数化查询(预编译语句)【参考附录11.1.1】。

2、  安全地使用存储过程【参考附录11.1.2】。

3、  转义用户输入【不建议,参考11.1.3】。

备注

请参考附录11.1的SQL注入防范代码样例

 

注:如果IE浏览器显示格式不正确,请使用chrome浏览器

Web安全开发指南--数据验证的更多相关文章

  1. axis1,xfire,jUnit 测试案列+开Web Service开发指南+axis1.jar下载 代码

    axis1,xfire,jUnit 测试案列+Web Service开发指南(中).pdf+axis1.jar下载    代码 项目和资源文档+jar 下载:http://download.csdn. ...

  2. 【web开发 | 移动APP开发】 Web 移动开发指南(2017.01.05更新)

    版本记录 - 版本1.0 创建文章(2016.12.30) - 版本1.1 更正了hybird相关知识:增加了参考文章(2017.01.05): + Web APP更正为响应式移动站点与页面,简称响应 ...

  3. Web安全开发指南--文件系统

    6.1.上传文件功能 简要描述 文件上传漏洞是由于文件上传功能实现代码没有对用户上传的文件进行正确处理,导致允许攻击者向服务某个目录上传文件. 解决方案 上传文件功能只对登录用户开放: 同时通过文件头 ...

  4. Web安全开发指南--异常错误处理与日志审计

    1.异常错误处理与日志审计 5.1.日志审计系统安全规则 1 日志系统能够记录特定事件的执行结果(比如 成功或失败). 确保日志系统包含如下重要日志信息: 1.  日志发生的时间: 2.  事件的严重 ...

  5. Web安全开发指南--会话管理

    1.会话管理 3.1.会话管理安全规则 1 避免在URL携带session id. 2 使用SSL加密通道来传输cookie. 3 避免在错误信息和调试日志中记录session id. 4 使用框架自 ...

  6. web安全开发指南--权限管理

    2.1               访问控制安全规则 1 访问控制必须只能在服务器端执行. 2 只通过session来判定用户的真实身份,避免使用其它数据域的参数(比如来自cookie.hidden域 ...

  7. web安全开发指南--认证

    1.认证 1.1.       认证和密码管理安全规则 1 认证控制必须只能在服务器端执行. 2 除了指定为公开的资源,对所有其它资源的访问都必须先经过认证. 3 为所有关键凭证实施防"暴力 ...

  8. Lightning Web Components 开发指南(二)

    Lightning Web Components 是自定义元素使用html 以及现代javascript进行构建. Lightning Web Components UI 框架使用web compon ...

  9. 移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)

    1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP出于性能提升或用户体验等原因,将其做在客户端完成, ...

随机推荐

  1. 【bzoj4486】【JSOI2015】串分割

    老省选题了. 首先考虑怎么比较超长数字的大小? 参见UTR1的那道题 先比size,然后比较字典序即可. 接下来考虑下切割的问题. 因为要将字符串切割成k份,所以这个字符串只会存在n/k个本质不同的起 ...

  2. 【LabVIEW技巧】LabVIEW OOP怎么学

    前言 有很多人对LabVIEW OOP存在比较极端的看法,大致分为两类: 1. 绝对否定派认为LabVIEW OOP只不过是LabVIEW为了追求时髦,在面向过程的基础上用簇做了一些特性,实际上完全不 ...

  3. 3.Python3标准库--数据结构

    (一)enum:枚举类型 import enum ''' enum模块定义了一个提供迭代和比较功能的枚举类型.可以用这个为值创建明确定义的符号,而不是使用字面量整数或字符串 ''' 1.创建枚举 im ...

  4. LeetCode解题报告—— Number of Islands & Bitwise AND of Numbers Range

    1. Number of Islands Given a 2d grid map of '1's (land) and '0's (water), count the number of island ...

  5. react表单提交

    class FlavorForm extends React.Component { constructor(props) { super(props); this.state = {value: ' ...

  6. Java8之Stream/Map

    本篇用代码示例结合JDk源码讲了Java8引入的工具接口Stream以及新Map接口提供的常用默认方法.    参考:http://winterbe.com/posts/2014/03/16/java ...

  7. AC日记——NOI2016区间 bzoj 4653

    4653 思路: 线段树,指针滑动: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1000005 #def ...

  8. 走进 Akka.NET

    官方文档:https://getakka.net/index.html 官网:https://petabridge.com/ 一.Akka.NET 是什么? Akka 是一个构建高并发.分布式和弹性消 ...

  9. 通过url判断当前页,动态给导航加样式

    //通过url判断当前页,动态给导航加样式 var str =location.pathname; var index = str.lastIndexOf("\/"); str = ...

  10. codeforces 某套题s : surf(贪心 || 动态规划)

    题目: Now that you’ve come to Florida and taken up surfing, you love it! Of course, you’ve realized th ...