对所有用户输入进行编码以防止 rXSS

Encode all user input to prevent rXSS

我正在尝试解决一个安全漏洞以防止 xss。

我应该在存储到数据库之前对所有用户输入(例如 <> 标签)进行编码,还是应该将原始输入存储到数据库中,并且只在从数据库中检索数据并显示在 HTML 上进行编码HTML?

Reflected XSS 是指在脚本未存储时向客户端显示相同输入的攻击。例如,在搜索中输入姓名,系统的答案是 "name not found." 在这种情况下,您可以输入脚本而不是姓名。

如果您想存储输入以便稍后读取。它被称为存储型 XSS。你怎么能防止它?这是一个困难的部分。您可以使用白名单验证。如果您的输入是 HTML 您可以使用 OWASP_Java_HTML_Sanitizer_Project https://www.owasp.org/index.php/OWASP_Java_HTML_Sanitizer_Project

什么时候需要用到enconding?您需要根据将要使用的上下文对数据进行编码。例如,如果您需要在 HTML 页面上显示数据,则需要在显示数据之前对 HTML 进行编码。但是如果你需要在 JS 脚本上使用它,你需要使用 URL enconde。编码取决于您使用数据的上下文。