硬核,腾讯内部整理的面向开发人员代码安全指南,适合所有程序员

简介: 硬核,腾讯内部整理的面向开发人员代码安全指南,适合所有程序员

现在软件、Web应用、App等程序都已经成为了企业的命脉。数据的安全一直都是企业最关心的问题。

今天给大家推荐的就是腾讯针对开发人员梳理的代码安全指南,全面的提出API层面的风险点并提出建议和解决方案。


安全指南使用场景

安全指南涵盖非常全面,可以用于

1、日常编程参考

2、系统扫描策略

3、安全组件开发

4、安全漏洞的修复指南


安全指南分为以下级别

1、必须

2、建议

3、推荐


安全指南列表清单


1、C/C++安全指南

2、JavaScript安全指南

3、Node安全指南

4、Go安全指南

5、Java安全指南

6、Python安全指南

62a717530357c38671478fcda68b0edf.png


部分安全指南目录截图

使用安全指南

下面给大家举例几个常用安全指南。

a、【Java安全指南1】SQL语句默认使用预编译并绑定变量

Web后台系统应默认使用预编译绑定变量的形式创建sql语句,保持查询语句和数据相分离。以从本质上避免SQL注入风险。


如使用Mybatis作为持久层框架,应通过#{}语法进行参数绑定,MyBatis 会创建 PreparedStatement 参数占位符,并通过占位符安全地设置参数。

示例:JDBC

String custname = request.getParameter("name"); 
String query = "SELECT * FROM user_data WHERE user_name = ? ";PreparedStatement pstmt = connection.prepareStatement( query );pstmt.setString( 1, custname); 
ResultSet results = pstmt.executeQuery( );

Mybatis

<select id="queryRuleIdByApplicationId" parameterType="java.lang.String" resultType="java.lang.String">    
      select rule_id from scan_rule_sqlmap_tab where application_id=#{applicationId} 
</select>


应避免外部输入未经过滤直接拼接到SQL语句中,或者通过Mybatis中的传入语句(即使使用,语句直接拼接外部输入也同样有风险。例如中部分参数通过传入SQL语句(即使使用PreparedStatement,SQL语句直接拼接外部输入也同样有风险。例如Mybatis中部分参数通过{}传入SQL语句后实际执行时调用的是PreparedStatement.execute(),同样存在注入风险)。

b、【Java安全指南2】文件类型限制


须在服务器端采用白名单方式对上传或下载的文件类型、大小进行严格的限制。仅允许业务所需文件类型上传,避免上传.jsp、.jspx、.class、.java等可执行文件。参考示例:

 String file_name = file.getOriginalFilename();
        String[] parts = file_name.split("\.");
        String suffix = parts[parts.length - 1];
        switch (suffix){
            case "jpeg":
                suffix = ".jpeg";
                break;
            case "jpg":
                suffix = ".jpg";
                break;
            case "bmp":
                suffix = ".bmp";
                break;
            case "png":
                suffix = ".png";
                break;
            default:
                //handle error
                return "error";
        }


【必须】禁止外部文件存储于可执行目录


禁止外部文件存储于WEB容器的可执行目录(appBase)。建议保存在专门的文件服务器中。


【建议】避免路径拼接


文件目录避免外部参数拼接。保存文件目录建议后台写死并对文件名进行校验(字符类型、长度)。建议文件保存时,将文件名替换为随机字符串。


【必须】避免路径穿越


如因业务需要不能满足1.2.3的要求,文件路径、文件命中拼接了不可行数据,需判断请求文件名和文件路径参数中是否存在…/或…\(仅windows), 如存在应判定路径非法并拒绝请求。


c、【JavaScript安全指南1】****【必须】HTML标签操作,限定/过滤传入变量值


使用innerHTML=outerHTML=document.write()document.writeln()时,如变量值外部可控,应对特殊字符(&, <, >, ", ')做编码转义,或使用安全的DOM API替代,包括:innerText=

// 假设 params 为用户输入, text 为 DOM 节点// bad:将不可信内容带入HTML标签操作const { user } = params;// ...text.innerHTML = `Follow @${user}`;// good: innerHTML操作前,对特殊字符编码转义function htmlEncode(iStr) {
  let sStr = iStr;
  sStr = sStr.replace(/&/g, "&amp;");
  sStr = sStr.replace(/>/g, "&gt;");
  sStr = sStr.replace(/</g, "&lt;");
  sStr = sStr.replace(/"/g, "&quot;");
  sStr = sStr.replace(/'/g, "&#39;");
  return sStr;}let { user } = params;user = htmlEncode(user);// ...text.innerHTML = `Follow @${user}`;// good: 使用安全的DOM API替代innerHTMLconst { user } = params;// ...text.innerText = `Follow @${user}`;


指南获取

腾讯内部整理代码安全指南PDF

链接:https://pan.baidu.com/s/1A7qKzGCDkA3OkcOklHG6dA 提取码:cttc


相关文章
|
4月前
|
开发者
代码之外:开发者的软技能修炼手册
在软件开发领域,代码只是冰山一角。成为一名优秀的开发者,不仅需要扎实的技术功底,更需具备一系列软技能。本文探讨了沟通能力、时间管理、团队协作、持续学习、解决问题、适应变化、领导力及情绪管理等关键软技能,并提供了实用心得,助力你在开发之路上全面发展。希望你能在这条道路上不仅技术精进,更能成为一名全面发展的优秀开发者。
|
架构师 Java 中间件
阿里内部从初级程序员到架构师学习路线+配套学习资源
阿里巴巴终于公开了从初级程序员到架构师的学习路线图,这里相对应的基本上就是从P5到P8的晋升体系!今天老师将会带着大家从初级程序员开始一点点分享整个晋升体系!
|
设计模式 缓存 Java
好家伙!阿里新产Java性能优化(终极版),涵盖性能优化所有操作
上月公司来了一位大佬,入职不到一周就把公司现有项目的性能优化了一遍,直接给公司节省了一半的成本。 一问情况,才知道这位仁兄也是一路被虐过来的。去年年底被裁,本以为自己技术还行,看了一段时间面经,复习了基础知识,就开始投大厂简历。阿里最先给他面试机会,结果没能扛过三面,然后是各种大大小小的公司,在实际面试中被碾压得翻不了身。整整一个半月,一个offer都没拿到,最后针对性的恶补,才入职了我司。
|
SQL 存储 Java
不讲废话,全程硬核,处理结构化数据的终极解决方案
现代Java应用架构越来越强调数据存储和处理分离,以获得更好的可维护性、可扩展性以及可移植性,比如火热的微服务就是一种典型。这种架构通常要求业务逻辑要在Java程序中实现,而不是像传统应用架构中放在数据库中。
142 0
|
缓存 负载均衡 架构师
程序人生 - 全栈工程师和架构师的区别
程序人生 - 全栈工程师和架构师的区别
600 0
|
弹性计算 Linux 数据库
对于啊阿里云提供平台供学生学习的看法
本文主要讲述了,我在阿里云提供的学习平台中学习到的知识,以及我在使用过程中对云平台的操作技巧愈加熟练的收获,当然还有对于平台对我们学生免费提供平台给予我们学习的感谢,本文也讲述我在云平台使用过程中收获的成长,人生的路途遥远,我们还需努力学习,砥砺前行。
|
前端开发 程序员 开发者
程序人生:程序员如何实现财富自由?
程序人生:程序员如何实现财富自由?
363 0
程序人生:程序员如何实现财富自由?
|
SQL Java 程序员
独家下载!《Java开发手册》灵魂13问,深度剖析一线大厂开发思维
《〈Java开发手册(泰山版)〉灵魂13问》独家首发!全网千万阅读量技术博主深度剖析Java规约背后的原理,从“问题重现”到“原理分析”再到“问题解决”,下载《Java开发手册》必备的伴读书目!
249257 2
独家下载!《Java开发手册》灵魂13问,深度剖析一线大厂开发思维
|
程序员
软技能,程序员编程之外的升值之道!
程序员,除了编码之外的软技能有哪些呢?《软技能——代码之外的生存指南》33岁实现职业自由、财富自由的作者给出了解读。
6494 0
软技能,程序员编程之外的升值之道!
|
缓存 编解码 程序员
秃头程序员告诉你搭建直播平台要重点优化哪些地方
想要搭建直播平台,最先要搞清楚直播平台的开发目标是什么?一个直播平台有确立的开发目标是必须的。那么如何来确立?就是一定要想清楚,用哪种能来吸引住你的用户去使用你的直播APP?一起来看看来自秃头程序员的经验分享。
秃头程序员告诉你搭建直播平台要重点优化哪些地方