ToB企服应用市场:ToB评测及商务社交产业平台

标题: Alibaba开发规范_安全规约:最佳实践与常见陷阱 [打印本页]

作者: 涛声依旧在    时间: 7 天前
标题: Alibaba开发规范_安全规约:最佳实践与常见陷阱

一、安全规约概述

随着互联网应用的普及,安全标题变得愈加严肃。攻击本事日益复杂,攻击者的动机和技术本事也不绝发展,给开发职员带来了巨大的挑战。为了应对这些挑战,必须遵循一系列的安全规约。这些规约涉及用户数据保护、权限控制、输入验证等多个方面,目标是最大限度地制止潜伏的安全毛病,保障用户信息和系统的安全性。
二、常见的安全规约

1. 用户个人页面和功能必须进行权限控制校验

在开发涉及用户个人数据的系统时,必须确保页面或功能能够进行权限控制校验。这意味着用户只能访问自己的数据,不能随意访问、修改或删除他人的数据。常见的权限控制方法包括角色权限控制(RBAC)、基于属性的访问控制(ABAC)等。
典范标题


  1. // 假设我们有一个 UserController,用于处理用户相关的操作
  2. @RestController
  3. @RequestMapping("/user")
  4. public class UserController {
  5.     @Autowired
  6.     private UserService userService;
  7.     // 获取用户信息
  8.     @GetMapping("/{userId}")
  9.     public ResponseEntity<User> getUserInfo(@PathVariable("userId") Long userId, Authentication authentication) {
  10.         // 获取当前登录用户的ID
  11.         Long currentUserId = (Long) authentication.getPrincipal();
  12.         
  13.         // 校验当前用户是否有权限查看该用户信息
  14.         if (!currentUserId.equals(userId)) {
  15.             return ResponseEntity.status(HttpStatus.FORBIDDEN).body(null); // 权限不足
  16.         }
  17.         // 获取并返回用户信息
  18.         User user = userService.getUserById(userId);
  19.         return ResponseEntity.ok(user);
  20.     }
  21. }
复制代码
2. 用户敏感数据克制直接展示,必须脱敏处理

为了保护用户隐私,所有用户的敏感信息(如身份证号、手机号码、银行卡号等)都应进行脱敏处理。脱敏不仅保护用户隐私,还能防止数据泄露。在中国大陆,个人手机号码常常会被脱敏显示为“137****0969”,这样可以有效保护用户的隐私。
办理方案


  1. // 用户实体类中的手机号码字段脱敏
  2. public class User {
  3.     private String username;
  4.    
  5.     @JsonInclude(JsonInclude.Include.NON_NULL)
  6.     private String phoneNumber;
  7.     // 获取脱敏后的手机号码
  8.     public String getPhoneNumber() {
  9.         if (phoneNumber != null && phoneNumber.length() > 4) {
  10.             return phoneNumber.substring(0, 3) + "****" + phoneNumber.substring(7);
  11.         }
  12.         return phoneNumber;
  13.     }
  14.     // 其他字段和方法
  15. }
复制代码
3. 用户输入的 SQL 参数必须严格使用参数绑定

SQL 注入是一种常见的攻击方式,通过构造恶意的 SQL 语句,攻击者可以操作数据库,获取、删除、修改数据,甚至长途实行恶意命令。为了防止 SQL 注入,必须严格使用参数化查询或预编译语句。
典范标题


办理方案


  1. // 不安全的写法
  2. String sql = "SELECT * FROM users WHERE username = '" + username + "'";
  3. // 安全的写法,使用参数绑定
  4. PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE username = ?");
  5. stmt.setString(1, username);
  6. ResultSet rs = stmt.executeQuery();
复制代码
4. 用户哀求传入的参数必须做有效性验证

输入验证是防止恶意攻击(如 SQL 注入、反序列化注入、ReDoS、XSS 等)的第一道防线。开发职员必须确保所有用户传入的参数都经过有效的验证。常见的毛病包括:

办理方案


  1. // 示例:验证分页参数,防止过大参数引发内存溢出等问题
  2. public void validatePageSize(int pageSize) {
  3.     if (pageSize <= 0 || pageSize > 100) {
  4.         throw new IllegalArgumentException("Page size must be between 1 and 100");
  5.     }
  6. }
  7. // 正则验证用户输入的邮箱地址,防止ReDoS攻击
  8. public boolean isValidEmail(String email) {
  9.     String regex = "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$";
  10.     Pattern pattern = Pattern.compile(regex);
  11.     Matcher matcher = pattern.matcher(email);
  12.     return matcher.matches();
  13. }
复制代码
5. 克制向 HTML 页面输出未经安全过滤或未精确转义的用户数据

跨站脚本攻击(XSS)是指攻击者通过向网页中注入恶意脚本代码,劫持用户的会话、盗取用户数据等。为了防止 XSS 攻击,必须对所有用户输入的内容进行精确的 HTML 转义,制止将未经处理的用户数据直接渲染到页面上。
办理方案


  1. // HTML转义:防止XSS攻击
  2. public String escapeHtml(String input) {
  3.     if (input == null) {
  4.         return null;
  5.     }
  6.     return HtmlUtils.htmlEscape(input); // 使用Spring的HtmlUtils类进行HTML转义
  7. }
  8. // 示例:输出用户输入的内容时进行转义
  9. public void renderUserComment(String comment) {
  10.     String safeComment = escapeHtml(comment);
  11.     // 将safeComment输出到HTML页面
  12. }
复制代码
6. 表单、AJAX 提交必须实行 CSRF 安全验证

跨站哀求伪造(CSRF)攻击答应攻击者通过伪造哀求来篡改用户的数据。为了防止 CSRF 攻击,必须在表单提交或 AJAX 哀求中添加 CSRF Token,确保哀求是由合法用户发起的。
办理方案


  1. // CSRF Token验证(Spring Security自动提供CSRF防护)
  2. @Configuration
  3. @EnableWebSecurity
  4. public class SecurityConfig extends WebSecurityConfigurerAdapter {
  5.     @Override
  6.     protected void configure(HttpSecurity http) throws Exception {
  7.         http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
  8.         // 其他安全配置
  9.     }
  10. }
  11. // 在表单提交时附带CSRF Token
  12. <form action="/updateProfile" method="POST">
  13.     <input type="hidden" name="_csrf" value="${_csrf.token}" />
  14.     <!-- 其他表单元素 -->
  15. </form>
复制代码
7. 必须实现防重放机制

重放攻击是指攻击者通过截获并重新发送合法的哀求,从而伪造用户操作。为防止重放攻击,应接纳肯定的防重放机制,如哀求的唯一标识符、验证码、频率限制等。
办理方案


  1. // 使用验证码防止滥用(短信验证码示例)
  2. public class SmsService {
  3.     private Map<String, Long> smsRequestTimestamp = new HashMap<>();
  4.     private static final int COOLDOWN_TIME = 60 * 1000; // 1 minute cooldown time
  5.    
  6.     public boolean sendSms(String phoneNumber) {
  7.         long currentTime = System.currentTimeMillis();
  8.         // 检查是否超过冷却时间
  9.         if (smsRequestTimestamp.containsKey(phoneNumber) &&
  10.             currentTime - smsRequestTimestamp.get(phoneNumber) < COOLDOWN_TIME) {
  11.             return false; // 短信请求过于频繁
  12.         }
  13.         // 发送短信逻辑(省略)
  14.         smsRequestTimestamp.put(phoneNumber, currentTime); // 记录发送时间
  15.         return true;
  16.     }
  17. }
复制代码
8. 用户天生内容的场景必须实现风控战略

在用户天生内容(UGC)的场景中,如发帖、评论、发送即时消息等,攻击者大概通过恶意内容、刷屏、发布违禁词等方式干扰系统。为此,必须实现防刷、内容过滤等风控战略。
办理方案


  1. // 防刷机制:限制发帖频率
  2. public boolean canPost(String userId) {
  3.     Long lastPostTime = userPostTimestamp.get(userId);
  4.     long currentTime = System.currentTimeMillis();
  5.     if (lastPostTime != null && currentTime - lastPostTime < 3000) { // 3秒钟内不能发帖
  6.         return false;
  7.     }
  8.     // 更新发帖时间
  9.     userPostTimestamp.put(userId, currentTime);
  10.     return true;
  11. }
  12. // 违禁词过滤
  13. public String filterBadWords(String content) {
  14.     List<String> badWords = Arrays.asList("illegal", "spam", "badword");
  15.     for (String word : badWords) {
  16.         content = content.replaceAll("(?i)" + word, "****"); // 替换违禁词为星号
  17.     }
  18.     return content;
  19. }
复制代码
三、小结

安满是软件开发中的一个焦点要素,特殊是在涉及到用户数据和交互的系统中。为了保护用户信息,防止各种恶意攻击,开发职员必须遵守严格的安全规约。这些规约包括权限控制、数据脱敏、SQL 注入防护、输入验证、XSS 防护等方面。通过合理的计划和安全步伐,可以大大进步系统的安全性,制止因毛病导致的数据泄露、服务停止等标题。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4