2013-01-10 3 views
1

Ajax 요청을 안전하게 처리하는 데 어려움을 겪고 있습니다. 문제는 데이터 변조입니다. 나는이 문제에 대해 읽었으며 클라이언트로부터 오는 정보를 절대로 믿지 않는 것이 좋습니다. 바이올린은 바이올린과 같은 도구를 사용하여 매우 잘 변경 될 수 있습니다. 우리는 서버 측에서도 유효성을 검사해야합니다. 하지만 제 질문은 검증하는 방법입니다.Ajax 호출에 대한 보안 구현

한 가지 예를 살펴 보겠습니다. 데이터베이스에 직원 정보가 있고 GetEmployeeDetailByEmployeeId 메서드가 하나만 노출되었다고 가정합니다. 직원이 요청을하기 전에 userId와 password로 인증을받으며이 유형의 사용자가이 요청을 할 수 있는지 여부를 승인합니다.

그러나 한 직원이 다른 직원의 employeeId를 제공하면 실제로 볼 수없는 데이터를 가져옵니다. 이 문제를 해결하기 위해 우리는 두 가지 해결책을 가지고 있습니다 1. 사람이 요청한 정보가 그 사람을위한 것인지 또는 그 사람의 관리자인지 여부에 관계없이 데이터베이스에 대한 요청을 확인해야합니다. 2. 우리는 어떻게해서든지 응용 프로그램 계층 자체에서 유효성을 검사해야합니다 우리가 그 부름을 거절해야할지 안할 지 여부.

첫 번째 접근 방식은 데이터베이스 요청을 만들어 레코드 연관성을 찾는 성능 집중적 인 방식으로 개발 비용을 추가합니다.

Pls는 이러한 문제를 해결할 수있는 더 좋은 해결책을 제시하고 있습니다.

+0

직원 레코드를 업데이트하기 위해 데이터베이스를 읽는 것이 너무 비싸면 더 나은 데이터베이스 또는 캐싱 체계가 필요합니다.비즈니스 규칙 점검으로 백엔드에서 수행해야하는 작업이 필요하며 데이터없이 결정을 내릴 수있는 마법의 탄환이 없습니다. 왜 데이터베이스에서 읽는 것이 문제인지 설명해주십시오. – Enno

답변

1

분명히 백 엔드 측에서 확인해야합니다. 그렇지 않으면 응용 프로그램이 어린이에 의해 악용 될 가능성이 큽니다. 당신이 필요가 없습니다

업데이트 당신은 당신이 처음에 권한을로드 한 후 후, 백 엔드에서 인증 메커니즘을 구현해야

, 당신은, 사용자 세션에 추가 할 수 있습니다 데이터베이스를 검색 할 때마다 필요한 권한에 대해 사용자 권한을 확인하기 만하면됩니다.

더는 인증 메커니즘을 구현하려면 목표를 user는 자신의 프로필입니다하지만 supervisor 그의 department 내에서 모든 사람을 볼 수 있습니다 볼 수 있습니다.

  • user A가 이미 세션에로드 된 user_id있다, 그렇지 않으면 오류를 보여 user_id = 123
  • user A가 너무 if (user_id == req_user_id)은 다음 정보를 표시 자신의 정보를 요청하는 경우에만 할 수 있습니다 가정 해 봅시다.
  • user B는 허용 값이 100이고, 그 사람에게 supervisor으로 전화를 걸자. 지금 if (user_id == req_profile_id)이 아닙니다. 우리는 허가를 확인합니다. 이 특정 작업에 대한 작업 권한이 10이므로 if (user_perm >= task_perm)이므로 요청한 사용자와 현재 사용자가 같은 부서에있는 경우 부서를 확인한 다음 정보를 표시하고 그렇지 않으면 오류를 표시합니다.

이 정보는 사용자의 정보를 기반으로 작동합니다.

+0

사실입니다.하지만 모든 작업에 대한 점검을 추가하려면 데이터베이스 비용이 많이 들기 때문에이 데이터베이스를 읽어야합니다. 언젠가는 협회가 직설적이지 않을지도 모르고 나는 몇몇 테이블에 대해서도 합류 할 필요가있다. 요청이 진짜인지 정확한 출처인지 여부를 검증 할 수있는 옵션이 있다면 어떻게 될까요? 해시 또는 일부 디지털 서명 종류의 물건과 비슷합니다. – Gaurav

+0

@Gaurav 어떤 경우에도 다시 체크 아웃해야하지만 사용자는 신뢰할 수있는 사용자가 될 수 있지만 그 대신 누군가가 공격 할 수 있습니다 ... –

+0

권한이 없습니다. 이 경우에는 충분합니다. 예, EmployeeDetailInfoViewPermission과 같은 권한이 부여됩니다. 악의적 인 직원이 다른 employeeId를 통과하면 해당 데이터를 받게됩니다. 그가 그 허락을받을 것이기 때문입니다. 나는 성능에 해를 끼치 지 않을뿐만 아니라 구현이 더 쉬운 솔루션을 찾고있다. – Gaurav