2012-01-17 41 views
9

Tôi có các quy tắc trong .htaccess cho các trang, hiển thị id thuộc tính v.v.Xác thực thông số url trong php

Tôi muốn đảm bảo xác thực mọi thông số tôi nhận được cho đúng truy vấn.

tôi có:

RewriteRule ^(.*)$ page.php?page=$1 
RewriteRule ^property/(.*)$ property.php?pid=$1 

như vậy trong php của tôi, tôi làm:

$page = $_GET['page']; 

$propertyid = $_GET['pid']; 

Bây giờ tôi cần phải đảm bảo cho họ nhưng tôi muốn biết phương pháp nào là tốt nhất để sử dụng để bảo đảm những điều này và đó là nơi im bị mất.

+0

$ _GET [ 'page'] = số và chỉ chữ cái? $ _GET ['pid'] chỉ là số? –

+3

câu hỏi này là tất cả các nơi. 1) điều này có liên quan gì đến SEO? 2) ý của bạn là "xác thực" và/hoặc "bảo mật"? – helloandre

+0

vâng tôi chỉ nhận được số và chữ cho trang và số cho pid –

Trả lời

15

tôi sẽ nói để sử dụng các quy tắc:

RewriteRule ^([a-z0-9]+)/?$ page.php?page=$1 [L,NC] 
RewriteRule ^property/([0-9]+)/?$ property.php?pid=$1 [L,NC] 

cách này nếu ai đó đi vào bất kỳ ký tự nào ngoài chữ cái và số (đối với trang) và số (đối với thuộc tính) l hiển thị một trang không tìm thấy.

Nếu bạn muốn thực sự để chắc chắn, bạn có thể

$page = mysql_real_escape_string($_GET['page']); chỉ cần đảm bảo kết nối cơ sở dữ liệu của bạn đang mở và bạn có thể cast pid như $propertyid = (int)$_GET['pid'];

0

tôi nghĩ với thông số trang, bạn nên có danh sách các trang đánh chặn, sau đó sau khi nhận được 'trang', bạn kiểm tra xem 'trang' có trong danh sách chấp nhận hay không. Ví dụ:

$arr_pages = ('page1','page2','page3'); 
$page = $_GET['page']; 
if(in_array($page,$arr_pages)) 
{ 
// do some thing 
} 
else 
{ 
// page not found 
} 

Và id:

$propertyid = intval($_GET['pid']); 

hy vọng sự giúp đỡ này :)