Security Tips — XSS & CSRF Prevention

DEX455 - Apex 安全与共享模型完全指南

📄 第 218 页 🎬 视频课程

课程章节介绍

同学们好,今天我们花几分钟聊聊Salesforce平台里的两个重要安全话题:跨站脚本攻击,也就是XSS,还有跨站请求伪造,简称CSRF。这部分内容虽然看起来有点技术,但我会尽量用大白话把它讲清楚。 首先说XSS。你想想,如果有人在网页里偷偷塞了一段恶意的HTML或者JavaScript代码,当其他用户浏览这个页面时,这段代码就会在用户的浏览器里执行,可能导致账号被盗、信息泄露。这就是跨站脚本攻击。Salesforce为了保护我们,在所有标准的Visualforce组件里都内置了反XSS过滤器。也就是说,如果你用官方的标签,像``、``,它们会自动把危险的字符转义掉,让恶意脚本没法执行。 但是,如果你自己写了一段自定义的JavaScript,或者用了``来引入外部的脚本文件,那就要小心了,因为这部分没有内置的保护。你必须在输出数据的时候,手动用Salesforce提供的编码函数去处理。这些函数有四个:`HTMLENCODE`用来转义HTML,`JSENCODE`用来在JavaScript字符串里安全地输出,`JSINHTMLENCODE`是在HTML内部嵌入JavaScript的时候使用,还有`URLENCODE`用于URL参数。记住,只要是你自己控制输出,就得给数据穿上防护衣,用对应的函数编码一下。 那再来看CSRF攻击。它跟XSS不一样,不是往页面里注入脚本,而是利用你已经登录的合法会话,在你不知情的情况下,诱导你的浏览器向后端发一个请求,执行一些你不想干的操作,比如改密码、转账。为了防这个,Salesforce在每个页面里都自动附带了一个随机的反CSRF令牌,而且标准控制器会自动验证这个令牌,确保请求是从它自己的页面发出来的。 可如果你的自定义控制器直接去读取请求的参数,比如通过`ApexPages.currentPage().getParameters().get('someParam')`拿到值就去执行敏感操作,那就绕过了反CSRF保护。因为标准验证只在标准控制器上起作用,你自己写的逻辑里要是没有额外加校验,就可能中招。所以,如果是自定义控制器,一定要多加注意,要么确保操作本身是无害的只读操作,要么自己实现令牌校验机制。 好,总结一下:Salesforce平台在标准组件和控制里帮我们做了很多安全防护,但一碰到自定义代码,尤其是自己写JavaScript、自己读参数的时候,就得自己上心,用对编码函数,留意CSRF风险。今天的要点就这些,有没有什么问题?没问题的话我们继续下一个主题。

关键词

Apex Salesforce Developer Guide