2013-12-08 2 views
0

각 사용자에 대한 사용자 보안 정책을 생성 중입니다. 각 사용자 보안 정책에는 정규 표현식 문이 있습니다.특정 숫자 범위 및 일부 특정 숫자를 제외한 숫자 범위와 일치하는 정규식

각 웹 페이지의 고유 한 ID는 0에서 100000 사이의 숫자 형식입니다. 사용자가 웹 페이지에 액세스하면 시스템은 정규 표현식으로 표현 된 사용자의 보안 정책에 따라 웹 페이지의 ID를 검사합니다. I를 해결하는 효율적인 정규식 물품 어떻게 ID 번호 2, 54, 109 2,001 및 10521.에 포함 된 웹 페이지를 제외하고 - 예컨대

는, 사용자 (100,000 1에서부터 ID) 모든 웹 페이지에 대한 액세스를 갖는다 이 요구 사항?

+3

실제 프로그래밍 언어로 검사하는 것이 더 좋습니다. 사용자 ID를 임의의 숫자로 가져 와서 보통의 'if'로 범위 내에 있는지 확인하십시오. 훨씬 더 깔끔하고 짧아 질 것입니다. –

+1

정규 표현식이이 작업을위한 올바른 도구가 아닌 이유를 설명하기 위해 제안한 예제의 정규식은'^ (?! (2 | 54 | 109 | 1 [1-9] \ d | [2-9 ] \ d {2} | 1 \ d {3} | 200 [01] | 10521) $) (\ d {1,5} | 100000) $' 이는 표현을 더 복잡하게하는 원자 그룹과 같은 성능 최적화 (효율성 기준) 이전입니다. 보안 기능을 제공하기 때문에 표준화 취약점 (예 : 선행 0)이 잠재적 인 우려가됩니다. – drf

답변

2

작업을 수행하는 데 프로그래밍 방식으로 악몽을 짓거나 상당한 성능 오버 헤드가 발생할 수 있습니다. 목록을 가지고 작업하는 것이 훨씬 효과적 (그리고 덜 복잡합니다) 일 것입니다. 데이터베이스에 이러한 목록을 저장하거나 RESTful 과 통신하는 클라우드 서비스 공급자를 사용하여 목록을 저장할 수 있습니다.

권한을 가정, PHP는 (주로 의사 코드)에 기록 된 예는 이미 데이터 저장에서 검색되었습니다 당신도이 원리를 확장하여 다차원 배열을 사용할 수

//user1 is logged in and has access to the following array of allowed pages: 
$loggedInUserPerms = array(1,6,99,821,983255); 
if (in_array($pageID, $loggedInUserPerms)) 
{ 
    //the logged in user has access to this page 
} 
else 
{ 
    //the logged in user doesn't, display access denied error 
} 

:

$loggedInUserPerms = array(
    1=>array("read"), 
    6=>array("read","write"), 
    9=>array("read","write"), 
    821=>array("read","write","delete"), 
    983255=>array("read") 
); 
if (in_array($pageID, $loggedInUserPerms)) 
{ 
    //the logged in user has access to this page 

    //you can now handle the sub arrays as well 
    //to determine what level of access the user has. 
} 
else 
{ 
    //the logged in user doesn't, display access denied error 
} 
+0

답변 해 주셔서 감사합니다. 나는 regexp에 꽤 새롭고 이것이 이것을위한 올바른 도구라고 생각했다. 권장대로 목록 데이터 구조에 보안 정책을 구현합니다. – Ook

+1

행운을 빌어 요! 정규 표현식에는 많은 정보가 있습니다. 강력하지만 사용자가 자주 사용하는 용도 나 프로그래밍 방식의 오버 헤드를 이해하지 않고도 성능에 문제가있는 경우가 많습니다. – brandonscript

관련 문제