2010-05-11 3 views
1

URL을 표시하는 HTML과 HTML 출력에 표시되는 ID와 같이 서버에서 나가는 모든 ID를 난독 화하려고합니다.Rails 앱에서 ID를 난독 화합니다.

인코딩 및 디코딩 방법이있는 간단한 Base62 lib를 작성했습니다. id의 인코딩 된 버전을 반환하고 디코드 된 params[:id]으로 리소스를로드하도록 컨트롤러를 조정하기 위해 ActiveRecord의 id 메서드를 정의하거나 더 나은 방법으로 원하는 결과를 얻을 수 있습니다. 이제 id는 url에 base62로 인코딩되고 응답은 올바른 리소스를 표시합니다.

이제는 has_many 관계를 통해 정의 된 하위 리소스가로드되지 않음을 알게되었습니다. 예 : User이라는 has_manyPost이라는 레코드가 있습니다. User.find(1).posts은 (는) user_id = 1의 게시물이 있지만 비어 있습니다. 제 설명은 ActiveRecord가 self[:id]과 비교하는 대신 user_idPostidUser을 겹쳐 쓰면서 비교해야한다는 것입니다. 그래서 기본적으로 이것은 나의 접근법을 쓸모 없게 만듭니다.

모델에 obfuscates_id을 정의하고 나머지는 적절한 위치에서 모든 인코딩/디코딩을하고 서버에서 ID를 반환하지 못하도록하는 것과 같습니다.

사용할 수있는 보석이 있습니까? 아니면 이것을 수행하는 방법에 대한 힌트가 누군가 있습니까? 나는 이것을 처음 시도하지 않는다고 생각한다.

+1

시간을 낭비 전반적인 보안을 개선하는 데 사용 된 수있는 시간을 낭비하고있다. 아니면 난독 화를위한 또 다른 이유가 있습니까? – LukeN

+2

ID 난독 화는 보안 측정 IMHO가 아닙니다. 사이트에 등록 된 사용자 수 또는 게시물 수와 같은 ID에 포함 된 특정 정보 만 숨 깁니다. 이들을 간단한 base62로 인코딩 된 버전으로 대체해도 이러한 종류의 정보는 공개되지 않습니다. 나는 너무 많은 시간을 낭비하지 않을 것입니다. 그래서 모델에서 단순히 obfuscates_id를 호출하면 멋질 것입니다. – fphilipe

+0

얼마나 많은 사용자 또는 게시물이 사이트에 있습니까? – Earlz

답변

3

설명하는 내용은 URL 슬러그의 특수 응용 프로그램처럼 들립니다. acts_as_sluggable 또는 friendly_id와 같은 플러그인을 살펴보십시오. 또한 사용자 모델에서 to_param 메서드를 재정의하는 방법을 살펴보십시오.

아마 여기에서 시작하십시오 : 난독에서 Best Permalinking for Rails

+0

#to_param을 무시하면됩니다. –

+0

고맙습니다. @jdl, 유망 해 보입니다. 한 가지주의 할 점이 있습니다. 인코딩 된 버전을 얻으려면 헬퍼 URL을 실제 ActiveRecord 객체로 전달해야합니다. 'user_path (@ user.id)'대신'user_path (@user)'를 사용하십시오. – fphilipe

관련 문제