2009-05-06 2 views
28

어제 동료와 나는 인증 수단으로 URL 매개 변수를 통해 로그인 자격 증명을 보내는 것이 안전한지 여부에 관해 뜨거운 논쟁을 벌였습니다. 그는 HTTPS가 서버 측에 요청을 보내기 전에 URL의 모든 비 호스트 이름/포트 문자를 암호화한다는 점을 올바르게 지적했습니다.URL 매개 변수를 통해 HTTPS를 통해 사용자 이름과 비밀번호를 안전하게 보낼 수 있습니까?

그러나 나는 여전히 이러한 자격 증명을 도용 할 수있는 곳의 경계 사례가 있다고 생각하며 HTTPS POST를 통해 전송해야한다고 생각합니다. 이것은 실제로 로그인/토큰 데이터를 보내는 안전한 방법입니까?

+1

당신은 SSL이 아닌 SSH를 찾으셨습니까 http://es.php.net/manual/en/function.session-set-save-handler.php? – Greg

+0

SSH는 이해가되지 않습니다. SSL은 HTTPS 이외의 컨텍스트에서 사용할 수 있지만이 정도면 충분합니다. – MSalters

+0

예, SSL이 아닌 HTTPS를 의미했습니다. 제목을 수정했습니다. –

답변

37

요청한 URL이 에 표시 될 수 있습니다. 웹 서버 로그브라우저 기록/북마크은 좋지 않습니다.

+0

사용자 이름 - 사용 (예 : OTP), URL을 통해 URL을 보내는 것이 실제로는 안전합니다. 더 많은 정보 @ http://stackoverflow.com/q/4833314/632951 – Pacerier

5

안전하게 큰 단어입니다. SSH를 사용하면 다른 사용자가 검색하지 못하지만 실제로 쿼리 문자열에 다른 사용자의 비밀번호를 표시하려고합니까? 사용자 어깨에 서있는 친구는 어떻습니까? SQL 인젝션은 어떤가? 정말 나쁜 생각, 적어도 양식 게시물에 넣어.

4

HTTPS가 URL을 암호화했다는 것을 알지 못했지만, 알고있는 것이 좋습니다.

그러나 보안 측면에서 보았을 때 URL 표시 줄에서 자격 증명을 읽을 수 있다는 사실에 더욱 신경을 썼습니다. 브라우저 기록에 저장되는 것은 말할 것도 없습니다.

8

자격 증명의 전송에 관한 한, 그는 옳습니다. 그러나 brwser 기록, 서버 로그 파일, 화면을 보는 사용자 등이 고려해야 할 다른 많은 사항이 있으며이 경우 위험 할 수 있습니다.

26

백 엔드 데이터베이스가있는 경우 추가 단계를 수행하십시오. 양식 게시물을 통해 사용자 이름과 암호를 제출하고, 백엔드에서 토큰 (GUID로 수행)을 반환하고, 데이터베이스 테이블에 토큰을 작성하고 만료 시간을 할당 한 다음 자격 증명 대신 쿼리 문자열에서 해당 토큰을 사용하십시오 . 이제 시스템이 매우 안전 해지고 고유 세션 식별자가 더하기 있습니다.

+8

+1 답이 아닌 해결책을 제공합니다. –

+0

왜 OAuth가 아닌가요? – Victor

1

또 다른 해결책이 있습니다. 세션에 PHP 핸들러를 사용하여 데이터베이스에 직접 세션 데이터를 처리기로 쉽게 문자열로 저장할 수 있습니다. DB에 만료 시간이있는 세션 테이블이 필요합니다. HTTPS 로그인 데이터를 보내면 올바른지, $ _SESSION 변수에 저장할 수 있으며 인터페이스를 제대로 수행했다면 DB로 이동합니다. 이것은 PHP 외부에서 노출되지 않으므로 강력한 로그인 시스템을 가지며 클라이언트 쿠키에는 토큰, 계정 또는 기타 중요한 데이터가 아닌 세션 ID 만 저장됩니다.

참조 :