目前,我正在显示特定网页上的链接,其中包含用户通过POST请求设置的URL。该网站将显示给显示该链接的第二个用户(用户2)。单击该链接后,它将返回到用户1的网页(或者就是它的预期用途)。但这是最近出现的,如果修改了URL或用户1是不正确的用户,则将URL设置为Javascript://%0Aalert(document.domain)//
,单击链接时将执行脚本。
如何在Java中验证此URL,并防止用户1在POST请求到来时将其设置为URI?
有(至少)两种方法可以解决此问题,可以一起使用或分别使用:
解析收到的URL,并检查其所有组成部分(方案,主机名,端口,路径,查询字符串等)是否包含您的应用通常会生成的合理值,并且您相信它们是无害的。
尤其是刚刚检查的方案http
和/或https
将足以阻止在你的问题中提到的特定攻击,但你几乎可以肯定应该做更多的验证远远不止这些。
最初生成URL时,请计算它的加密消息身份验证代码(使用存储在服务器中但从未发送给客户端的密钥),并将其与URL一起发送。当您从客户端收到URL时,请确认MAC仍然匹配。
这对于确保该值的一般技术应该由客户机到服务器中继不变,不被篡改。如果您有多个这样的值,而不仅仅是一个URL,则可以将它们全部编码为一个字符串,并在所有值上计算一个MAC。只要确保编码是确定性的,即可在验证MAC时准确地重复编码。另外,您可能希望将其他元数据(例如用户的ID和/或时间戳)组合到MAC输入中,以防止重放攻击。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句