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



我正在看一篇文章和编写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危险,但是反正不会将此输入转换为字符串吗?我看到的方式,只有在我在某个地方使用_dangerouslySetInnerHTML时,这才是不安全的。

如果不安全:如何安全?

位置。看这里:https://www.w3schools.com/jsref/prop_loc_hash.asp

那么是什么使它变得危险?当您危险地使用它时,它会变得危险。使用它的危险方法:

  • 将其与您的html(_dangerlysetinnerhtml)合并
  • 在IT上调用eval()
  • 在SQL查询中使用此输入
  • ...

但是做STH。喜欢

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

或将其分配给variabe并不是不安全的。您使用该变量的方法尽管可能不安全(请参见上面的列表)。

最新更新