Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你能在这个javascript问题上找到任何可用的安全威胁吗?_Javascript - Fatal编程技术网

你能在这个javascript问题上找到任何可用的安全威胁吗?

你能在这个javascript问题上找到任何可用的安全威胁吗?,javascript,Javascript,假设我有如下代码: object[hash].init(); 请假设散列来自网站散列(www.example.com#散列) 我上面显示的代码中是否存在任何可能的安全漏洞?例如,我是否可能在#散列中放入任何注入并触发任何恶意代码的代码 谢谢。这不会有问题,哈希将不会作为JavaScript代码计算,它将被视为字符串。如果hash的值不是object的有效属性名,object[hash]将返回undefined,您将得到一个错误(无法在undefined上调用init) 另一方面,如果以字符串作

假设我有如下代码:

object[hash].init();
请假设散列来自网站散列(www.example.com#散列

我上面显示的代码中是否存在任何可能的安全漏洞?例如,我是否可能在#散列中放入任何注入并触发任何恶意代码的代码


谢谢。

这不会有问题,
哈希将不会作为JavaScript代码计算,它将被视为字符串。如果
hash
的值不是
object
的有效属性名,
object[hash]
将返回
undefined
,您将得到一个错误(无法在
undefined
上调用
init

另一方面,如果以字符串作为JavaScript代码计算的方式使用
散列
,则存在安全问题

所以这很好:

object[hash].init();
但这是而不是(即使使用内部引号):

例如,如果
hash
是一个包含

']; alert('foo'); object['something
然后
alert('foo')将被执行。可以在不破坏代码的情况下插入和执行代码


尽管如此,我还是不会这样做。它将代码太多地绑定在一起。我可能会创建一个函数图(与您的示例类似,但不同):


这不会有问题,
散列
作为JavaScript代码计算,它将被视为字符串。如果
hash
的值不是
object
的有效属性名,
object[hash]
将返回
undefined
,您将得到一个错误(无法在
undefined
上调用
init

另一方面,如果以字符串作为JavaScript代码计算的方式使用
散列
,则存在安全问题

所以这很好:

object[hash].init();
但这是而不是(即使使用内部引号):

例如,如果
hash
是一个包含

']; alert('foo'); object['something
然后
alert('foo')将被执行。可以在不破坏代码的情况下插入和执行代码


尽管如此,我还是不会这样做。它将代码太多地绑定在一起。我可能会创建一个函数图(与您的示例类似,但不同):


这并不是真正的安全问题,更多的是设计问题,但从公开的URL访问内部数据结构可能会让恶意用户以意外的方式操纵代码。虽然这不会直接暴露安全漏洞,但意外的代码行为会使风险更容易潜入代码中。但是,如果您确定以“错误”的顺序调用init()方法是可以的,那么就没有问题。

这不是真正的安全问题,更像是一种设计,但从公开的URL访问内部数据结构可能会让恶意用户以意外的方式操纵代码。虽然这不会直接暴露安全漏洞,但意外的代码行为会使风险更容易潜入代码中。但是,如果您确信以“错误”的顺序调用init()方法是可以的,那么就没有问题。

这可能导致问题的唯一方法是使用ES6 harmony代理

代理允许您捕获所有方法。见


没有其他方法可以实现全面覆盖。这个特殊的“一网打尽”评估了
名称

唯一可能导致问题的方法是使用ES6 harmony代理

代理允许您捕获所有方法。见


没有其他方法可以实现全面覆盖。这个特殊的catch all eval了
名称

,但他注入了字符串,其中可能包含javascript!任何字符串都可以包含javascript。或者它可以包含Fortran或Haskell代码。处理可能包含代码的字符串不是安全问题;仅评估来自不受信任来源的字符串是不安全的。是的,我的思考过程有点偏离,得到了我的-2;)如果散列是一个像
\uuuuuu proto\uuuuuu
这样的“神奇”属性,那么可能会出现意外的结果!是的,在我的实际工作中,我使用了映射,这是为了我的对象工厂,尽管你的函数映射在逻辑上更安全(再次使用thx)。但是他注入了字符串,其中可能包含javascript!任何字符串都可以包含javascript。或者它可以包含Fortran或Haskell代码。处理可能包含代码的字符串不是安全问题;仅评估来自不受信任来源的字符串是不安全的。是的,我的思考过程有点偏离,得到了我的-2;)如果散列是一个像
\uuuuuu proto\uuuuuu
这样的“神奇”属性,那么可能会出现意外的结果!是的,在我的实际工作中,我使用了映射,它用于我的对象工厂,即使您的函数映射在逻辑上更安全(再次使用thx)。对象['alert(“恶意代码”);']='No,只是一个对象键';对象['alert(“恶意代码..?”);']='不,只是一个对象键'@kapep,但您无法访问该名称。如果具有该名称的唯一代码行是
object[name].init()
@kapep,则需要代理才能访问该名称,但无法访问该名称。如果具有该名称的唯一代码行是
object[name].init()
Thx,那么您需要一个代理来访问该名称。对于意见,这是一种解脱,它会变成一个设计问题;)。这个init()是对象必须具有的某种多态性。我把它放在我的示例中,因为我不是直接加载所选对象,而是直接执行该对象必须具有的一般函数(即init())。Thx的观点是,这是一种解脱,它变成了设计问题;)。这个init()是对象必须具有的某种多态性。我把它放在我的试卷里了
var object = Proxy({
  "get": function _get(obj, name) {
    // name is an evil string containing javascript
    eval(name); // security risk
    return {
      "init": function _init() {
        // init code
      }
    };
  }
});