2011-01-19 3 views
9

양식에 csrf 토큰을 사용하지 않으면 내가 드러내는 위험은 무엇입니까? 나는 혼란 스러울 수 있기 때문에 간단한 레이블이나 위험 이름을 찾고 있지 않습니다. 나는 침입자가 정확히 무엇을 할 수 있는지, 그리고 어떤 상황에서만 그들이 보통 영어로 이것을 할 수 있는지 이해할 필요가있다.CSRF 토큰이없는 양식 : 위험 요소는 무엇입니까?

+8

앱 보안에 대해 자세히 알아 내려고하는 사람과 같은 소리가납니다. – park

답변

9

CSRF 취약점은 악의적 인 사용자 (또는 웹 사이트)가 의심하지 않는 사용자가 사이트에서 원하지 않는 동작을 수행 할 수있게하는 취약점입니다.

예를 들어, 사용자가 POST 대신 GET을 통해 계정을 삭제할 수 있도록 허용 한 경우, 다른 사람이 귀하의 사이트에 다음 의견을 게시 할 수 있습니다 (사이트에 의견이나 기타 입력을 게시 할 수있는 방법이 있다고 가정) 등)

나는 귀하의 사이트에 의견을 남기고 싶습니다. 이 멋진 이미지를 확인하십시오!
<의 img = 'HTTP SRC :.이 이상 할 경우 //example.com/delete_my_account.php "/ >

그리고 해당 페이지 사용자로드 로그인 이제 언제든지 자신의 계정이 삭제된다 GET 대신 POST를 사용하면 양식을 작성하여 사용자가 제출하여 동일한 결과를 얻을 수 있지만 CSRF 토큰을 사용하는 경우 불가능합니다.

또 다른 예는 외부 사이트 귀하의 사이트에 POST하는 양식을 작성하여 바람직하지 않은 조치를 취할 수 있습니다. 귀하의 사이트에 CSRF 토큰을 사용하지 않는 장바구니가 있다고 가정 해보십시오. 악의적 인 사이트는 부 tton은 "등록하려면 여기를 클릭하십시오"라고 말하지만 실제로 사이트에서 무언가를 1000 개 주문합니다. 사이트의 로그인 한 사용자가이 악의적 인 사이트를 방문하여 버튼을 클릭하면 메일에 멋진 놀라움을 선사합니다.

분명히 다른 경우가 있습니다. 이들은 몇 가지 예입니다. Google 검색에는 기사 및 자습서가 많이 표시되어야하며 그 중 다수는 다른 예가있을 것입니다. Wikipedia page에는 흥미로운 예가 있습니다.

예제의 주된 아이디어는 사용자가 사이트에서 사용자가 보낸 것처럼 행동을 수행하도록 속이며 실제로 사용자가 자신이 일어난 일을 인식하지 못하거나 발생하지 않도록하려는 경우입니다. 파괴적인 (즉, 사용자 계정에서 물건을 삭제하거나 사용자를 로그 아웃 할 수있는) 행동이나 중요한 (즉, 돈을 다루는) 행동을하는 경우 CSRF 토큰을 사용해야합니다. 귀하의 사이트가 친구를위한 사진 앨범 일 뿐이라면 CSRF 토큰을 신경 쓰지 않아도됩니다 (CSRF 토큰을 필요로하는 사이트를 만들 때 항상 연습하는 것이 좋습니다).

사용자가 의도적으로 사이트에 제출 한 양식의 요청을 토큰으로 추가하지 않는 한 사용자가 해당 작업을 수행 할 의도가 있는지 여부를 알 수있는 방법이 없습니다.

따라서 항상 해당 POST를 생성하는 모든 양식에서 고유 한 토큰을 사용하고 사이트에 게시 된 요청의 유효성을 검사하여 현재 사용자에 대한 유효한 토큰을 갖고 싶습니다. 또한 영원히 지속되지 않도록 얼마 동안 시간이 지나면 토큰을 만료시켜야합니다.

1

CSRF이 무엇인지 설명하고이 문제를 가장 잘 방지 할 수있는 방법을 설명하는 훌륭한 기사를 읽어 보시기 바랍니다.

+0

samquo 그 기사가 그걸 설명하거나 어리 석다. $ "Exploit Example"부분이 있습니다. – Alfred

+1

@samquo 귀하의 사이트가이 사이트에 의해 공격 당할 가능성이 거의 없습니다. 예를 들어 Gmail이 쿠키가 SET 일 때 CSRF 보호 기능이 없으면 내 계정을 사용하여 이메일을 보낼 수 있습니다. 이 기사에 모두 나와 있습니다. 읽어야합니까? – Alfred

+0

@samquo 귀하의 사이트가이 공격을받지 않을 가능성이 높습니다. 예를 들어 Gmail에 쿠키가 SET (로그인)되었을 때 CSRF 보호 기능이없는 경우 계정을 사용하여 이메일을 보낼 수 있습니다. 이 기사에 모두 나와 있습니다. 읽어야합니까? – Alfred