2010-12-12 4 views
3

GET으로 제출하는 양식이 있습니다. 즉, URL에 데이터가 추가됩니다. 양식은 보안 토큰으로 보호됩니다.양식을 GET으로 제출하지 않아야하는 이유

언제나 양식을 POST와 함께 제출해야한다고 들었습니다. 제 경우에는 양식을 GET으로 제출하면 어떻게됩니까? 보안 위험은 무엇입니까?

+0

양식의 용도에 따라 다릅니다. ** 당신이 말하는 특별한 형태 ** ** –

+0

이것은 데이터베이스에 항목을 생성하거나 업데이트하는 형식입니다. – sami

+1

항상 POST 방법이어야합니다. HTTP 표준과 상식에 따라 그냥 –

답변

4

실제 위험은 사용자가 서버에 제출 된 매개 변수를 정확히 볼 수 있으며 URL을 다시 책갈피에 추가 할 수있을뿐만 아니라 (URL을 다시 제출하기 위해) URL을 수정하여 잠재적 인 의미없는 매개 변수를 제출할 수도 있습니다. 서버 측 스크립트.

경우에 따라 (예 : Google에서 검색을 북마크 할 수 있도록 GET을 사용하는 경우) 다른 경우 위험을 초래할 수있는 경우가 있습니다 (예 : 로그인 양식).

'보안 토큰'의 성격과 사이트/응용 프로그램 사용자가 해당 토큰을 볼 수 있고 수정할 수있는 경우 해를 끼칠 수있는 가능성에 따라 다릅니다. 하지만 POST를 사용하여 양식을 제출 한 경우에도 제출 페이지의 html 소스에서도 볼 수 있습니다.

서버 측 스크립트에서 수신 한 데이터의 상황에 따라 제출 된 정보를 삭제하고 SQL 주입 범위를 줄이는 등의 작업을 수행해야합니다 (+1에서 @Switz).

+0

DT가 말했듯이, http://en.wikipedia.org/wiki/Session_fixation을 참조하십시오. – TBH

+1

@ 다운 유권자 : 저는 생각하지 않습니다.하지만 투표 할 수는 있습니다. * 이유 *를 설명하는 설명을 남겨두면 OP가 더/반대로 더 반올림되는 인수를 얻습니다. 그리고 나도 뭔가를 배울 수 있습니다. * sigh ... * –

+1

추가 노트로서 물론 POST 제출물은 GET Vars와 같이 변경 및 변조 될 수 있으므로 실제로 그 이유는 없습니다. 그러나 사용자가 인증되지 않고 URL이 공개 (인증되지 않음)되지 않으면 양식 자체가 페이지에 표시되지 않으면 공격자는 양식 키를 볼 수 있습니다. – Kissaki

3

잘 구현 된 토큰을 사용하는 경우 북 마킹 문제를 제외하면 차이가 없습니다. GET을 사용하면 제출 된 매개 변수로 URL을 북마크 할 수 있습니다. POST는 그렇지 않습니다. 잘 구현 된 토큰에 관해서는 MD5에 해쉬 된 12-15 문자 길이의 임의 문자열이 작업을 수행해야한다고 말합니다.

일반적으로 GET은 Cross Site Scripting Forgery을 통해 악용하는 것이 더 쉬운 것으로 간주되지만 문제가되지 않는 토큰이있는 경우 다시 사용합니다.

모든 사용자는 데이터가 전송되는 방식 (POST 또는 GET)에 관계없이 무의미한 내용을 제출하거나 서버 측 스크립트에 데이터를 다시 제출할 수 있으므로 올바른 고려 사항은 아닙니다. 제출 된 데이터의 유효성을 검사하고 처리할지 여부를 결정하는 서버 측 스크립트. 중요한 정보가 서버에 전송되는 곳에 POST를 사용하여 사용자가 북마크하지 않도록하고 브라우저가 검색 기록에 저장하지 못하도록해야합니다. 따라서 누구나 사용자의 암호 등을 볼 수 있습니다.

데이터 위생 그러나 양식 방법과는 아무런 관련이 없습니다. 일반적으로 XSS (htmlentities)에 대한 보호, SQL 인젝션 (mysql_real_escape_string)은 사용자 입력에 대해 구현해야하는 가장 기본적인 보호로 간주됩니다 (사용자가 제출 한 데이터가 html 소스에 나타나면 전자는 후자입니다. SQL 액세스 권한이있는 데이터).

4

당신이 큰 형태를 가질 경우, 보안 문제에 대한 각 브라우저

URL Length = protocol+domain+port+query_string (GET)

에 대한 URL 길이 제한에주의 해 , 다른 대답들 ha 그걸 잘 덮었 어.
를 적어 둡니다, 양식 제출는 북마크-수

+0

Opera의 최대 URL 길이 : 2147483647 바이트 – mario

3

POST가 (당신이 GET을 보호 할 수 있습니다) 보안 아니다 사용하는 IMO의 주요 이유가 필요하지만, 올바른 의미를 갖는 문제입니다하지 않습니다.

GET 요청에는 부작용이 없어야합니다. 예를 들어 GET을 사용하는 검색 양식은 완벽합니다. 사용자가 뒤로 버튼을 사용하거나 사용자가 실제 방문하기 전에 일부 바이러스 백신 또는 내부 가속기가이를 실행하는 경우 GET 요청이 반복 될 수 있습니다 ...

GET의 보안 문제 중 하나는 URL 따라서 토큰)은 서핑 기록의 일부가됩니다. 따라서 GET 요청에 대해 일회성 토큰을 사용해야합니다.

관련 문제