TAE安全开发规范

一 HTML安全规范

参考《HTML WHITELIST》:http://newwiki.zx.taobao.com/index.php?title=HTML_WHITELIST

二 CSS安全规范

参考《CSS WHITELIST》:http://newwiki.zx.taobao.com/index.php?title=CSS_WHITELIST

三 JS安全规范

参考《JS API》:http://newwiki.zx.taobao.com/index.php?title=JS_API

四 防安全漏洞开发规范

XSS(跨站脚本攻击)

漏洞描述

    跨站攻击,即Cross Site Script Execution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

安全隐患

    攻击者可利用XSS漏洞获取用户cookie,传播蠕虫,篡改页面或进行钓鱼等

防范措施

    对参数做html转义过滤(要过滤的字符包括:单引号、双引号、大于号、小于号,&符号),防止脚本执行。在变量输出时进行HTML ENCODE处理。 PHP应用:可以使用htmlspecialchars对用户参数进行编码 JAVA应用:可以使用org.apache.commons.lang.StringEscapeUtils提供的Escape函数

示例参考

    问题代码示例:
   

<!-- lang: php -->
<?php
<!-- lang: php -->
           $aa=$_GET['dd'];
<!-- lang: php -->
           echo $aa."123";
<!-- lang: php -->
       ?>

    安全代码示例:


<!-- lang: php -->
 <?php
<!-- lang: php -->
       $aa=$_GET['dd'];
<!-- lang: php -->
       echo htmlspecialchars($aa)."123";
<!-- lang: php -->
   ?>

CSRF(伪造跨站请求)

漏洞描述

    CSRF(Cross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用

安全隐患

    该漏洞可以在用户登录完成后的会话里,让用户执行不知情的操作。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......

防范措施

    一般是使用csrf token的验证机制来保证用户请求的合法性:即在功能请求页面设置csrf token,并在服务端对token进行验证。TAE已经支持了此功能。TAE在渲染页面的时候会默认在所有的POST表单中插入一个含有csrf token的隐藏iuput域:


<!-- lang: html -->
 <form action="create_user.php" method="POST">
<!-- lang: html -->
       username:<input type="text" name="username">
<!-- lang: html -->
       password:<input type="text" name="password">
<!-- lang: html -->
       <input type="submit">
<!-- lang: html -->
       <input name="_tae_token_" type="hidden" value="2Z1KbUmOwwcUEOWvAGBRYA%3D%3D">
<!-- lang: html -->
   </form> 

    这样提交表单的时候TAE服务端就会进行token验证,如果验证不通过就报错。 所以,ISV同学在编写后台form表单时候,如果是执行写数据库的action,最好将form表单的method改成“POST”,这样就可以使用TAE的安全机制保护应用站点了。当然TAE也支持在js里面使用token验证机制。TAE默认会注入两个全局变量到js环境中:_csrfTokenKey(默认是“_tae_token_”),_csrfTokenValue(token值,是实时生成的),只要将这两个参数加到ajax请求参数中就可以使用token验证机制了:


<!-- lang: js -->
 KISSY.io({
<!-- lang: js -->
       type: "POST",
<!-- lang: js -->
       url: "http://test.uz.taobao.com/post.php",
<!-- lang: js -->
       data: "x=1&" + _csrfTokenKey + "=" +  _csrfTokenValue,
<!-- lang: js -->
       success: function(msg){
<!-- lang: js -->
           alert( "success" );
<!-- lang: js -->
       },
<!-- lang: js -->
       error: function(msg,textStatus){
<!-- lang: js -->
           alert( "error" );
<!-- lang: js -->
       }
<!-- lang: js -->
   });

示例参考

    见上节说明,这里有个特例: 因为有些站点的搜索框也是用POST表单实现的,而搜索功能一般是只读服务,没必要使用token验证机制,针对这种情况,TAE提供了一种方式去disable这种POST表单的token验证机制,添加一个隐藏的标识input域:


<!-- lang: html -->
<form action="create_user.php" method="POST">
<!-- lang: html -->
       username:<input type="text" name="username">
<!-- lang: html -->
       password:<input type="text" name="password">
<!-- lang: html -->
       <input type="submit">
<!-- lang: html -->
       <input type="hidden" class="_disable_csrf_token_check_">
<!-- lang: html -->
   </form>

SQL Injection(SQL注入漏洞)

漏洞描述

    SQL注射是由于程序中对使用到的sql没有做到数据和结构分离导致程序的sql能被恶意用户控制,从而引发的数据库信息泄漏,修改,服务器被入侵等一系列严重后果。

安全隐患

    数据库信息泄露或被修改,还有可能威胁服务器的安全。

防范措施

    对程序中使用到的SQL语句,使用变量绑定的方式进行数据和结构的分离。

参开示例

    问题代码示例:
 

<!-- lang: php -->
  <?php
<!-- lang: php -->
           $id=$_GET['id'];
<!-- lang: php -->
           $conn = mysql_connect("localhost","root","") or die ("wrong!");
<!-- lang: php -->
           $sel=mysql_select_db("mydb",$conn);
<!-- lang: php -->
           $sql="select * from user where id = ".id
<!-- lang: php -->
           $que=mysql_query($sql,$conn);
<!-- lang: php -->
       ?>
    安全代码示例:
  

<!-- lang: php -->
 <?php
<!-- lang: php -->
           $id=$_GET['id'];
<!-- lang: php -->
           $conn = mysql_connect("localhost","root","") or die ("wrong!");
<!-- lang: php -->
           $sel=mysql_select_db("mydb",$conn);
<!-- lang: php -->
           $sql="select * from user where id = :id"
<!-- lang: php -->
           $stmt = $conn->prepare($sql); 
<!-- lang: php -->
           $stmt->execute(array(':id'=>$id)); 
<!-- lang: php -->
       ?>

转载于:https://my.oschina.net/syc2013/blog/184204

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 背景 4 2. 编码安全 4 2.1. 输入验证 4 2.1.1. 概述 5 2.1.2. 白名单 5 2.1.3. 黑名单 5 2.1.4. 规范化 5 2.1.5. 净化 5 2.1.6. 合法性校验 6 2.1.7. 防范SQL注入 6 2.1.8. 文件校验 6 2.1.9. 访问控制 6 2.2. 输出验证 6 2.2.1. 概述 6 2.2.2. 编码场景 6 2.2.3. 净化场景 7 2.3. SQL注入 7 2.3.1. 概述 7 2.3.2. 参数化处理 7 2.3.3. 最小化授权 7 2.3.4. 敏感数据加密 7 2.3.5. 禁止错误回显 8 2.4. XSS跨站 8 2.4.1. 输入校验 8 2.4.2. 输出编码 8 2.5. XML注入 8 2.5.1. 输入校验 8 2.5.2. 输出编码 8 2.6. CSRF跨站请求伪造 8 2.6.1. Token使用 9 2.6.2. 二次验证 9 2.6.3. Referer验证 9 3. 逻辑安全 9 3.1. 身份验证 9 3.1.1. 概述 9 3.1.2. 提交凭证 9 3.1.3. 错误提示 9 3.1.4. 异常处理 10 3.1.5. 二次验证 10 3.1.6. 多因子验证 10 3.2. 短信验证 10 3.2.1. 验证码生成 10 3.2.2. 验证码限制 10 3.2.3. 安全提示 11 3.2.4. 凭证校验 11 3.3. 图灵测试 11 3.3.1. 验证码生成 11 3.3.2. 验证码使用 11 3.3.3. 验证码校验 11 3.4. 密码管理 12 3.4.1. 密码设置 12 3.4.2. 密码存储 12 3.4.3. 密码修改 12 3.4.4. 密码找回 12 3.4.5. 密码使用 12 3.5. 会话安全 13 3.5.1. 防止会话劫持 13 3.5.2. 会话标识符安全 13 3.5.3. Cookie安全设置 13 3.5.4. 防止CSRF攻击 13 3.5.5. 会话有效期 14 3.5.6. 会话注销 14 3.6. 访问控制 14 3.6.1. 跨权访问 14 3.6.2. 控制方法 14 3.6.3. 控制管理 14 3.6.4. 接口管理 15 3.6.5. 权限变更 15 3.7. 文件上传安全 15 3.7.1. 身份校验 15 3.7.2. 合法性校验 15 3.7.3. 存储环境设置 15 3.7.4. 隐藏文件路径 16 3.7.5. 文件访问设置 16 3.8. 接口安全 16 3.8.1. 网络限制 16 3.8.2. 身份认证 16 3.8.3. 完整性校验 16 3.8.4. 合法性校验 16 3.8.5. 可用性要求 17 3.8.6. 异常处理 17 4. 数据安全 17 4.1. 敏感信息 17 4.1.1. 敏感信息传输 17 4.1.2. 客户端保存 17 4.1.3. 服务端保存 17 4.1.4. 敏感信息维护 18 4.1.5. 敏感信息展示 18 4.2. 日志规范 18 4.2.1. 记录原则 18 4.2.2. 事件类型 18 4.2.3. 事件要求 18 4.2.4. 日志保护 19 4.3. 异常处理 19 4.3.1. 容错机制 19 4.3.2. 自定义错误信息 19 4.3.3. 隐藏用户信息 19 4.3.4. 隐藏系统信息 19 4.3.5. 异常状态恢复 20 4.3.6. 通信安全 20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值