2011-04-19 13 views
0

서버에 파일을 저장해야하는 작은 webapp/tool/widget을 작성하려고합니다. 서버 쪽에서 불필요한로드를 피하기 위해 클라이언트 쪽에서 파일 해시 (SHA, MD5 또는 기타 ...)를 만들고 싶습니다. HTML5 FileAPI로 관리 할 수 ​​있지만 Opera와 IE9 사용자는 해킹 당할 것입니다. JAVA 또는 Flash 애플릿은 HTML5 방식 대신 응용 프로그램 간 브라우저 호환을 유지하는 데 사용할 수 있습니다. 하지만 저는 JAVA/Flash에 익숙하지 않기 때문에 (그리고 나는 삶이나 죽음의 상황에서만 그것들을 사용할 것입니다) 가능한 한 JS에 충실하고 싶습니다. JS, JAVA, Flash, 뭐든간에 ...서버 측 대 클라이언트 측 파일 해시

전통적인 POST 메서드 (PHP 사용)는 사용자 에이전트에 관계없이 트릭을 수행합니다. 그리고 AFAIK는 더 안전합니다.

간단히 말해서, 내 질문은 : 서버 쪽 해시보다 클라이언트 쪽을 선호해야하는 이유는 무엇입니까?

두 가지 방법의 장단점을 제시 할 수 있습니까?

+1

의견 :이 클라이언트 측과 관련된 고통과 혼란은 저를위한 완전한 비 시작 프로그램이되었습니다.어쨌든 파일을 저장해야하는 서버가 그렇게하는 동안 간단한 해시 값을 누적하면 과부하가 걸릴 것이라고 상상할 수 없습니다. – Pointy

답변

2

서버 쪽 로드가 많지는 않지만 그 이상입니다. 코드를 작성하고, 시간을 측정하고, 메모리 사용량 등을 측정하십시오. 거대한 문제인 경우 크롤링 작업을 수행하면 큰 문제가 될 수 있습니다.

클라이언트 쪽 해시를 신뢰할 수 없으며 서버에서 해시를 다시 계산해야합니다. 서버로드가 적지 만 대용량 파일을 해시하는 데 시간이 오래 걸리면 사용자에게 성가 시게됩니다.

매분마다 수천 개의 거대한 파일을 가지고 있지 않으면 서버 쪽에서 할 수 있습니다!

+1

여기서 핵심은 클라이언트 쪽에서 오는 해시를 신뢰할 수 없다는 것입니다. 해시의 요점은 데이터가 올바른지 보장하는 것입니다. 고객 측에 그렇게하면 이익이 상실됩니다. 여기서 병목 현상은 파일을 서버로 옮기는 대역폭이 될 것입니다. 이는 두 가지 접근 방식 모두에서 상수입니다. 일반적으로 * after *를 최적화하면 문제가 발생합니다. 그 접근법의 예로서 ebay, youtube, meebo 등을보십시오. – Milimetric

2

클라이언트 쪽에서이 작업을 수행하는 데 몇 가지 찬성을 쓰려고했지만 정직하게 생각하면 스스로 힘들게 만들 것입니다. 제출 된 해시가 생성되었는지 확인하는 방법은 무엇입니까? 누구나 쉽게 Firebug 같은 도구를 사용할 수 있으며 실행 코드를 변경할 수 있습니다 (올바른 경우이 문제가 실제로 잘못 사용 된 경우 : D). 또한 자신의 요청을 생성/위조하여 PHP 파일에 게시 할 수 있으므로 많은 제어 권한을 잃을 수 있습니다.

그렇다면 데이터를 어떻게 확인 하시겠습니까? 다른 해시를 생성하고 서로 비교하여 확인하십시오. 하지만 당신은 이미 그것을 서버 측에서하고 있습니다!

오히려 환경을 제어하는 ​​서버 측의 해시 작업을 유지하는 것에 대해 생각해보십시오. 그리고 해싱 알고리즘은 수년간 계속되어 왔기 때문에 알고리즘을 상당히 최적화했을 것입니다. 그리고 고객에게 더 많은 호환성을 보장 할 것입니다.

그리고 당신은 충분한 트래픽을 얻는 경우 그 해시 주요 성능이 어쩌면 더 큰 무언가로 업그레이드 할 때입니다 다음 공격은 ...

그러나 이것은 매우 가능하며 의미가 오해하지 않습니다 - http://www.movable-type.co.uk/scripts/sha1.html -하지만이 솔루션을 신뢰할 수는 없습니다.

0

JavaScript가 꺼져 있으면 어떻게 될까요? 서버 측에서 JavaScript를 사용하지 않고도 작업을 수행 할 수 있습니다. 100 % 보장을 위해 추가 서버 리소스를 사용하겠습니까?

관련 문제