2011-12-24 3 views
1

나는이 문제를 해결할 수있는 장소인지 여부를 묻는 질문을하고 있습니다. 다음과 같은 URL이 있다고 가정하십시오. http://localhost/products/1010/minprice/1/maxprice/100/잘못된 URL 쿼리 문자열을 처리합니다.

이제 누군가가 변수 이름 제품 minprice 및 maxprice의 일부 또는 전체를 제거하여이 URL을 변경하려고합니다. 어쨌든 URL이 유효한지 확인하기 위해 검사를 수행하고 변수가 변경된 경우 페이지가 재 지정 될 때 제거 될 수 있습니까?

if(preg_match('#^/carsearch(.*/)?(manufacturer/([A-Za-z0-9\-%]+))(/.*)?$#',$uri,$tmatch)) 
     $return['manufacturer'] = $tmatch[3]; 

그리고 내가 가지고있는 쿼리 문자열 변수를 확인 :

나는 현재 URL을 확인하려면이 있고, 이것은 또 다른 URL의 예입니다

if($_GET['manufacturer'] != null) { 
$n .= 'manufacturer/'.$_GET['manufacturer'].'/'; 

}

새 유효한 URL을 포함하는 새 $ n 변수가 페이지에 다시로드됩니다. URL은 잘 작성되지만 페이지는 상상할 수있는대로 계속로드됩니다. 나는 궁금해서, 이것을 할 수있는 더 좋은 방법이 있을까? 나는 옳은 길을 가고 있는지조차 모른다.

귀하의 도움을 많이 주시면 감사하겠습니다.

+0

U http://en.wikipedia.org/wiki/HTTP_404 – diEcho

+0

404 페이지를 만들고 '.htaccess'로 트릭을해야합니다. – diEcho

답변

0
if(isset($var)) 

변수가 설정되어 있는지 확인하십시오.

if(isset($var) && product_exists($productID)) 
    //accept 
else 
    //deny 

여러분이하는 일과 상관없이 같은 원리입니다.

0

매개 변수를 페이지에 전달하면 매개 변수를 페이지 POST로 또는 URL에서 수행하는 것처럼 전달할 때도 항상 클라이언트가 매개 변수를 변경할 수 있습니다. URL이 예상 한 형식인지 확인하려면 유효성 검사 절차를 사용해야합니다. 이 일을 한 가지 방법은 예를 들어, 정규 표현식을 사용하는 것입니다 :

if (preg_match("/^\/products\/\d+\/minprice\/\d+\/maxprice\/\d+\/$/", $url) != 1) 
{ 
    echo("Stop changing my URL!"); 
} 
else 
{ 
    echo("Thanks for not changing anything!"); 
} 

내가 무엇을 당신이해야 할 것은 값을 얻을 당신이 그렇게 지정하지 않은 재 작성 방법의 어떤 종류를 사용하고있는 것을 볼 수 테스트하기 전에 요청 경로를 $ url 변수에 추가하십시오. 정규 표현식은 단순히 다음과 같은 사항에 대해 테스트 :

  1. 문자열 (^)의 시작
  2. /제품/(/ 제품/- 슬래시가 일부이기 때문에 앞으로 & 역 슬래시는 다른 백 슬래시로 이스케이프해야합니다 정규 표현식 구문의).
  3. 디지트 최소 하나 (\ D +)
  4. /최소 가격/
  5. 디지트
  6. /최대 가격/
  7. 디지트
  8. /
  9. 문자열의 끝 ($)의 이는 아무 의미 그렇지 않으면 sequenec을 뒤따라 올 수 있습니다.
관련 문제