2017-05-03 54 views
1

我正在尝试解决一个安全漏洞以防xss。编码所有用户输入以防止rXSS

我应该在存储到数据库之前编码所有用户输入,例如<>标记吗?或者我应该将原始输入存储到数据库中,并且仅在从数据库中获取数据并在HTML上显示时才对HTML进行编码?

回答

1

反映的XSS是指当脚本未存储时发生的攻击,它向客户端显示相同的输入。例如,在搜索中输入名称,系统的答案是“找不到名称”。在这种情况下,您可以放置​​脚本而不是名称。

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

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

+0

在这种情况下,我应该只在需要显示数据时进行编码,而不是在将数据存储到数据库时进行编码? – youcanlearnanything

+1

是的,因为你可以在不同的系统中使用数据。可能执行命令或在网页上显示。您需要根据将使用它的系统对数据进行编码。 – reos