2017-12-03 183 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') { 
} 

或將其分配給變異不是不安全。你對這個變量做什麼雖然可能是不安全的(參見上面的列表)。