直接将URL哈希参数值分配给Javascript变量是不安全的吗?

时间:2017-12-03 07:57:17

标签: javascript reactjs xss

我正在查看an article以及在React中编写向导,并将每个步骤与URL相关联。作者使用URL的“哈希”部分来指定步骤,并分配给this.state.currentStep。他们评论说这是不安全的。

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 个答案:

答案 0 :(得分:1)

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

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

  • 将其与您的html(_dangerouslySetInnerHTML)无法合并
  • 在上面调用eval()
  • 在sql查询中使用此输入未转义
  • ...

但是做某事。像

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

或将其分配给变量并不是不安全的。你使用该变量做什么虽然可能不安全(见上面的清单)。