2017-01-24 2 views
0

실제 데이터를 읽거나 쓰려면 사용자가 데이터베이스의 레코드에 대한 읽기/쓰기를 수행해야합니까? 또는 동일한 쿼리에서 모두이를 적용 할 수 있습니까?은 데이터베이스를 변경하기위한 조치가 취해지기 전에 어설 션 또는 점검이 완료되어야합니까?

즉.

assertUserCanViewClassRoom($classroomId, $userId, $userRole); 
assertUserCanRemoveStudent($classroomId, $userId, $userRole); 

또는 조치의 SQL에서 점검을 완료해야합니까?

viewClassRoom($classroomId, $userId, $userRole); 
removeStudent($classroomId, $userId, $userRole); 

내 존재 너무 자세한 정보 (일명 워디) 이제

난 그냥 작업을하고 사용자가 있으므로, 사용자가 액세스 할 곳으로 허용되는 것을 보장하기 위해, 모든 쿼리를 수정하려고 했어요 표 B의 레코드를 읽거나 업데이트하여 하위 사용자 (관리자, 교사, 학생이라고 함)가 속한 레코드를 간과 할 수있는 역할을 수행합니다.

현재이 프로세스를 통해 모든 사용자가 레코드를 수정할 수 있습니다). 교사 A는 교사 B 정보를 볼 수 있으며 교실에서 학생을 추가/삭제하여 수정할 수 있습니다. 선생님의 이드를 간단히 확인하면이 작업이 발생하지 않도록하는 것이 이상적입니다.

교사 X가 표 B에 id = Y를 기록 할 권한이 있는지 확인하기 위해 해당 레코드에 액세스하기 전에 수표를 발행해야합니까? 데이터를 읽거나 쓰는 것보다 먼저 확인하는 작업을 두 번하고 있습니까?

가 나는 이 수정되는 기록에 사용자 ID 또는 사용자 역할 권한에 따라 테이블을 조인 간단한 쿼리 문 변경 될 거라 생각 했어요.

나는 훌륭한 체크리스트를 작성하는 것이 좋지만 지금은 데이터베이스에 대한 추가 트래픽을 통해 간단한 읽기 또는 쓰기 트랜잭션을 완료하려고합니다. 나는 사용자가 이것을 수행하는 것보다 작업을 수행 할 수 있는지 확인하기 위해 assert 또는 sql을 통한 확인과 같은 방법을 사용합니다.

어설 션/권한 확인을위한 표준적인 방법입니까? 업데이트, 삽입 또는 삭제를위한 간단한 기능을 가지고 있는지 먼저 확인하십시오. (삭제는 실제로 사용되지 않는다는 사실을 기억하십시오) 그렇지 않은 경우 더 나은 제안은 무엇입니까?

추가 정보 사용자가 현재 자신의 데이터를 읽을 수 있도록 시스템이 설정되었지만 간단한 수정을 통해 사용자는 실제로 다른 사람의 데이터를 읽을 수 있습니다.

프로젝트는 MySQL의 백엔드는주의 인 경우

답변

2

항상 당신이 당신의 위생 검사에 매우 확신 아니에요 특히, 먼저 확인 지향하는 모든 오브젝트와 PHP입니다. is_admin가 true의 경우

그래서, 당신은 간단한

SELECT is_admin FROM users WHERE user = '{$userid}'; 

등을 할 거라고, 당신의 선택/업데이트/삽입 스크립트에 실시한다. 그렇지 않은 경우 액세스를 거부하십시오.

+0

이러한 검사는 모든 데이터에 액세스하기위한 표준 방법이어야합니까? 읽기/쓰기? – mcv

+2

읽기 및 쓰기에 필요한 보안 수준에 따라 다릅니다.db에 일반 정적 백엔드 출력을 작성하는 경우에는 필요하지 않습니다. 독서를 위해, 그것은 민감한 물자에 완전히 달려있다. 관리자가되어야하거나 해당 행에서 선택할 수있는 특별한 권한이 있어야합니다. 그렇다면 미리 확인하십시오. unsanitized 데이터의 경우에도, 사전 검사는 도움이되지 않습니다 - 주사는 어느쪽으로 든 발생할 수 있습니다. – Eoghan

+0

현재 내 게시물에서 보안 수준이 0입니다. 나는 이미 많은 노력없이 사이트를 쉽게 해킹했다. 나는 사용자 A가 그것을 조작하는 것보다 사용자 B의 데이터를 볼 수 있다면 근본적으로 잘못된 것이고 사용자 ID가 왼쪽 조인 문을 사용하는 기본 쿼리에서 사용되지 않은 이유는 무엇일까요? – mcv