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

时间:2014-08-22 06:35:01

标签: javascript cross-site location-href fortify

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

2 个答案:

答案 0 :(得分:0)

当用户可以将数据放入网页或获取会话数据时,会发生Cross-site Scripting

如何保护

从不允许在您的网页中注入代码。因此,如果您有表单,请在服务器中进行检查并解析,然后再在页面中打印。

您不应允许href更改页面内容。您始终escape数据!。

阅读关于location.hrefhttps://stackoverflow.com/a/24089350/2389232

的回答

<强>样品

你有一个iframe,用GET变量改变了什么:

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

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

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

答案 1 :(得分:0)

这段代码应该只在 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