2017-12-03 25 views
0

나는 an article과 React의 작성 마법사를보고 있으며 각 단계가 URL과 연결되어 있습니다. 작성자는 URL의 "해시"부분을 사용하여 단계를 지정하고 this.state.currentStep에 지정합니다. 그들은 이것이 안전하지 않다고 말합니다.Javascript 변수에 URL 해시 매개 변수 값을 직접 할당하는 것이 안전하지 않습니까?

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)
  • 호출 평가()로 이스케이프
  • 를 사용하여 SQL 쿼리
  • ...
  • 에 이스케이프이 입력

하지만 sth. like

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

또는 variabe에 할당하는 것은 안전하지 않습니다. 그 변수로 무엇을할지는 안전하지 않을 수 있습니다 (위의 목록 참조).