目前,我正在特定网页上显示一个链接,其中包含用户通过 POST 请求设置的 URL。该网站会显示给显示该链接的第二个用户(用户 2)。单击该链接后,它将返回到用户 1 的网页(或者这就是它的预期目的)。但最近出现了这样的情况,如果 URL 被修改或者用户 1 是坏用户,它将 URL 设置为Javascript://%0Aalert(document.domain)//,当单击链接时它将执行脚本。如何在 Java 中验证此 URL,并防止用户 1 在 POST 请求传入时将其设置为 URI?
1 回答
繁花如伊
TA贡献2012条经验 获得超12个赞
有(至少)两种方法可以解决这个问题,您可以一起使用或单独使用:
解析收到的 URL 并检查其所有组成部分(方案、主机名、端口、路径、查询字符串等)是否包含您的应用程序通常生成的合理值,并且您相信这些值是无害的。
特别是,只需检查该方案是否
http
和/或https
足以阻止您问题中提到的特定攻击,尽管您几乎肯定应该做更多的验证,而不仅仅是这样。最初生成 URL 时,计算其加密消息身份验证代码(使用存储在服务器上且从未发送到客户端的密钥)并将其与 URL 一起发送。当您收到客户端返回的 URL 时,请验证 MAC 是否仍然匹配。
这是一种通用技术,用于确保客户端应原样转发回服务器的值不被篡改。如果您有多个此类值,而不仅仅是一个 URL,您可以将它们全部编码为单个字符串,并计算所有这些值的单个 MAC。只需确保编码是确定性的,以便在验证 MAC 时可以准确地重复它。此外,您可能希望将其他元数据(例如用户 ID 和/或时间戳)组合到 MAC 输入中,以防止重放攻击。
添加回答
举报
0/150
提交
取消