2012-04-15 4 views
0

JSON 객체로 클라이언트에 전송되는 정보 트리가 있습니다. 그 객체에서, 나는 데이터베이스에서 오는 원시 ID를 갖고 싶지 않습니다. id 및 object의 필드 (예 : title) 나 salt의 해시를 만들려고 생각했지만 소금이 문제가 될 수 있습니다. 이것이 처리 오버 헤드에 심각한 영향을 미칠 수 있습니다.클라이언트 측 처리를위한 데이터베이스 키 보안

SELECT * FROM `things` where md5(concat(id,'some salt')) = md5('1some salt'); 

이러한 상황에서 ID를 흐리게 처리하는 표준적인 방법이 있습니까?

+0

그래서 데이터베이스의 데이터로 쓰고있는 스크립트를 신뢰하지 않습니까? – ChrisK

+0

웹과 db 서버 사이의 다리를 신뢰하지 않는다면 제안 된 방법을 사용하여 다리를 통해 소금을 보냄으로써 정보를 확인합니다. 브리지를 통해 소금을 보내면 일반 텍스트를 사용하여 id로 검색 할 수 있습니다. – ChrisK

+0

[순차적 해시 유사 함수를 설계하는 방법] 가능한 중복 (http://stackoverflow.com/questions/9804100/how-to-design-a-sequential-hash-likefunction) – Quentin

답변

1

나는 당신을 위해 두 가지 옵션을 생각할 수 있습니다 :

1) 사전 해시마다 ID와 데이터베이스의 원시 ID로 저장합니다. DB 크기 및 크기 제한에 따라 이것은 좋은 아이디어 일 수도 있고 아닐 수도 있습니다.

2) 간단한 해쉬 함수를 직접 작성하십시오! 아이디어가 없다면 간단하게 제안 할 수 있습니다. 간단하다는 이유만으로 그것이 효과가 없다는 것을 의미하는 한 그것이 좋지 않다는 것을 의미하지는 않습니다! 함수가 클라이언트 측에서 해시되지 않는 것으로 가정합니다. 개인적으로 DB 끝보다는 서버 측 코드 끝에서 처리되는 해시 함수와 같은 처리 함수를 선호합니다. MySQL을 가능한 한 무료로 유지하여 가능한 최소 대기 시간으로 데이터를 반환하기를 원하기 때문입니다.

0

md5(concat(id,'some salt')) 값으로 새 열을 만들고 계산 문구를 저장하기 위해 select 문을 만들기 전에 계산할 수 있습니다.

1

옵션은 PHP 세션 데이터를 사용하여 클라이언트에 전송 된 id # 목록을 해시 ID # s와 함께 저장하는 것일 수 있습니다.

이것은 다음에로드 할 때마다 추적 할 수없는 고유 한 해시가있을 것임을 의미합니다.

해시 ID를 설정할 수 있지만 (이 경우에는 salt가있는 md5가 작동하지만 간단한 것은 무엇이든간에) 세션의 배열에 저장할 수 있다고 생각합니다.

가능한 경우 데이터베이스에서 그렇게하지 마십시오.

관련 문제