如何在 javascript 中保护 location.href 免受跨站点脚本的影响?

Posted

技术标签:

【中文标题】如何在 javascript 中保护 location.href 免受跨站点脚本的影响?【英文标题】:how to protect location.href from cross site scripting in javascript? 【发布时间】:2014-10-15 22:44:50 【问题描述】:

在我的 javascript 函数中我使用 location.href 如下 location.href = "../Floder1/result.jsp"; 它工作正常,但是当我使用强化工具时,它显示跨站点脚本which can result in the browser executing malicious code. 如何保护它免受跨站点脚本攻击。非常感谢,您的回答将不胜感激。

【问题讨论】:

你设置 location.href 的字符串是从哪里来的? 向 location.href 赋值是错误的方式?如果是这样,请指导我。 @Gabs00,flag 不做任何事情,只是为了识别/验证我保留了 flag @kinakuta,我认为字符串来自 cookie。 您能否提供更多关于您想要实现的目标的信息?问题以及您选择此解决方案的原因 【参考方案1】:

此代码仅适用于 firefox,因为并非所有浏览器都实现了代理

您可以做的是将原始location 对象替换为代理对象,在其中您向代理添加一些逻辑以检查位置的允许值。这不会防止直接修改原始对象 (location),但如果您在代码中仅使用代理对象,您应该没问题。

// suppose we are in example.com
let validator = 
   set: function(obj, prop, val) 
     if (prop === 'href') 
       if(typeof val != 'string')
         throw new TypeError('href must be string.');
       
       if (!val.startsWith("https://example.com/")) 
         throw new Error('XSS');
       
     
    obj[prop] = val;
    return true;
   ,
   get: function(obj, prop)
    return prop in obj?
        obj[prop] :
        null;
   
;
let proxiedLocation = new Proxy(location, validator);
console.log(proxiedLocation.href);// work same as location.href
proxiedLocation.href = "https://example.com/page1";// work fine
proxiedLocation.href = "https://example.net/page1";// cause exception

【讨论】:

【参考方案2】:

Cross-site Scripting 发生在用户可以将数据放入网页或获取会话数据等情况下。

如何保护

绝不允许在您的网页中注入代码。因此,如果您有一个表单,请在服务器中检查它并在打印到您的页面之前对其进行解析。

您不应允许href 更改页面内容。你总是escape之前的数据!

阅读这个关于location.href的答案:https://***.com/a/24089350/2389232

样本

您有一个 iframe,它会随 GET 变量发生变化:

sample.tld/index.jsp?iframe=none.jsp

我可以将script 注入您的 iframe,因此您应该使用转义字符保护它:

// Escape the characters in the server and send it to the client.
// So the variable GET iframe will be valid

【讨论】:

,我应该如何为我目前的情况(问题)写条件来保护 snake,我没有在我的代码中使用任何 iframe,只是我的 js 函数 location.href = "../Floder1/result.jsp"; 问题出在哪里?这些location.href 重定向到另一个页面。这不是一个漏洞。如果 fortify tool 说这行是 XSS 漏洞,那就错了。 Read this explain. 如果它解决了您的问题,请标记:)。否则告诉我你想做什么。问候!

以上是关于如何在 javascript 中保护 location.href 免受跨站点脚本的影响?的主要内容,如果未能解决你的问题,请参考以下文章

Rails - 如何向用 javascript 创建的表单添加 CSRF 保护?

Javascript:对多维数组进行排序

如何保护 AJAX 或 javascript Web 应用程序

如何保护 JavaScript API 访问令牌?

如何保护用户使用 javascript 清除复选框? [复制]

如何在javascript中对具有csrf保护的django框架进行正确的ajax调用?