2013-01-16 2 views
-1

CSRF를 방지하는 방법 중 하나는 양식에 토큰을 사용하는 것입니다.크로스 사이트 요청 위조를 방지

  1. 은 숨겨진 필드에서의 토큰 값을 설정, 세션에 저장,을 encryted하는 토큰 값을 생성 : 기사를 많이 겪고 난 후에 나는 단계는 일반적으로 이러한 라인을 따라 것을 알아 냈어 형태. $ _POST [ '토큰'] == $ _SESSION [ '토큰']

내 질문은 : 양식 처리 페이지에서

  • 숨겨진 필드에 토큰 값이 같은 평등에 대한 세션 값을 비교 토큰 값을 암호화해야하는 이유는 무엇입니까? GET 방법을 사용한다고 가정하고 침입자는 1에서 1000 사이의 간단한 정수 값을 사용한다는 것을 알고 있습니다. 공격자가 요청을 위조하기 위해 이미지를 사용한다면, 그는 보내야합니다 무작위로 1000 이미지 요청을 강제로 .. 좋아? 아니면 이것을 할 수있는 다른 방법이 있습니까?

    또한 POST 메서드 만 사용하면 CSRF 요청을 방지 할 수 없다는 사실을 읽었습니다. 따라서 두 번째 질문은 이것이 사실이라면 POST 메서드를 사용하는 경우 어떻게 공격자가 위조 된 요청을 성공적으로 만들 수 있습니까?

  • +1

    토큰을 암호화 할 필요가 없으므로 무작위로 만들 필요가 있으므로 1에서 1000 사이의 숫자를 사용하지 말고 보통 sha1 또는 md5라는 긴 토큰을 생성하여 임의의 문자열만으로 충분합니다. 사이트에 양식이있는 경우 양식의 '조치'가 사이트를 가리키고 내 사이트의 javascript가 양식을 제출하고 양식에 대한 POST 요청으로 표시되는 양식을 복제 할 수 있습니다. –

    답변

    0

    많은 자동화 된 프로세스와 1000 개의 brute-force 요청을하는 응용 프로그램을 사용하는 공격자는 단 몇 분만의 질문입니다.

    은 따라서이 같은 토큰을 설정하는 것이 좋다 : 이로써

    $token = md5(uniqid(rand(), true)); 
    

    당신은 항상 끝낼를 고유의 임의의 토큰 암호화가 전혀 필요하지 않습니다 동안 - 그것은 단지 더 난처을 추가합니다 : -). 당신의 선호하는 암호화 방법을 사용하십시오. 누군가 요즘에만 sha1()만을 사용하고 일부는 더 나아갑니다. 그러나 이것은 국방부의 안전 구역이 아니며, 단지 랜덤 토큰입니다. 이 짐승 같은 공격을하는 것을 쉽게 추측해서는 안됩니다.

    POST 메서드를 사용하는 것만으로는 충분하지 않습니다. GET 매개 변수가 포함 된 URL을 선택하여 POST 요청으로 변환 할 수있는 Firefox 확장을 설치했습니다. 간편한 복사 + 붙여 넣기 + 클릭.

    토큰을 숨김 필드로 설정할 필요가 없습니다. GET에서 토큰을 읽고 POST 배열에서 양식 데이터를 읽는 동안 양식 작업 URL의 GET 매개 변수로 사용할 수도 있습니다.

    +0

    또는 쿠키를 사용하면 모든 페이지/링크에 토큰을 적용 할 필요가 없습니다. – Laurence

    +0

    하지만 당신이 말한 "자동화 된 프로세스 및 응용 프로그램"은 서버 쪽에서 만 작동 할 것입니까? 그 응용 프로그램이 피해자 브라우저에서 요청을 보내 게하려면 어떻게합니까? – depz123

    관련 문제