2017-12-03 188 views
0

我正在看an article并在React中编写向导,并且每一步都与一个URL关联。作者使用URL的“散列”部分来指定步骤,并将其分配给this.state.currentStep。他们评论说这是不安全的。将URL哈希参数值直接分配给Javascript变量是不安全的吗?

class BasicWizard extends React.Component { 
    constructor() { 
    this.state = { 
     steps: [] 
     currentStep: location.hash //obvs this is an unsafe way to do this -- this example is for conceptual purposes only 
    }; 
    } 

我的问题:

这是为什么不安全?我的猜测是这是一个XSS危险,但是这个输入不会被React转换为字符串吗?我看到它的方式,如果我在某处使用_dangerouslySetInnerHTML这只会是不安全的。

如果不安全:如何安全?

回答

1

Location.hash不是不安全的,因为它只返回一个字符串。 请看这里: https://www.w3schools.com/jsref/prop_loc_hash.asp

那么是什么让它变得危险? 危险使用它会变得危险。使用它的 危险的方式:

  • 合并它与你的HTML(_dangerouslySetInnerHTML)
  • 调用eval()就可以了转义
  • 使用该输入的SQL查询
  • ...
  • 转义

但是做某事。像

if(location.hash === 'login') { 
} 

或将其分配给变异不是不安全。你对这个变量做什么虽然可能是不安全的(参见上面的列表)。