Tôi hiện đang làm việc trên một khung công tác MVC Style cho một công ty và vì lý do bảo mật tôi cần đảm bảo rằng bộ điều khiển/phương thức được truyền qua Chuỗi truy vấn là ký tự hợp lệ cho RFC (mà tôi không thể tìm thấy).Xác nhận tên lớp/phương thức bằng regex
tôi cần để có thể xác nhận/khử trùng tên lớp theo những gì được cho phép bởi các thông dịch viên PHP
Ví dụ:
class SomEFunk__YClAssName extends Controller
{
}
Tôi cần một số loại regex mà sẽ xác nhận SomEFunk__YClAssName
và khử trùng nó nếu cần thiết! Đây cũng là nguyên tắc tương tự như phương pháp.
Có một số điều cần xem xét như
- numerics lúc bắt đầu
- Chỉ gạch dưới cho phép
- Một số PHP đặc biệt Chars được phép.
Mọi thông tin về biểu thức này hoặc có thể sẽ thực sự hữu ích.
Dưới đây là một số của Bộ luật Router của tôi để bạn có thể nhìn thấy nơi tôi cần phải thực hiện nó:
private function prepareQueryString()
{
if(strlen($this->query_string) == 0)
{
return;
}
//Remove [ending|starting|multiple] slashes
$this->query_string = preg_replace('/^\/+|\/+$|\/(?=\/)/', '', $this->query_string);
foreach(explode('/',$this->query_string) as $Key => $Value)
{
if($Key == 0)
{
$Controller = $this->AssignController($Value);
}
if($Key == 1)
{
$this->AssignMethod($Value);
}else
{
$this->AssignParam($Value);
}
}
//Build RouterVar stdClass
}
public function AssignController(String $Controller)
{
if(!empty($Controller))
{
//Sanitize
}
}
public function AssignMethod(String $Method)
{
if(!empty($Method))
{
//Sanitize
}
}
public function AssignParam(String $Param)
{
$this->params[] = $Param;
}
Bạn sẽ thấy những bình luận "Làm vệ sinh", nơi kiểm tra là cần thiết.
Cảm ơn bạn về ví dụ mã và liên kết tài liệu. Tôi đã đánh dấu đây là câu trả lời. – Xunnamius
** Chú ý **: Tôi nghĩ có một lỗ hổng trong 'preg_match' của bạn, vì không có dấu phân cách bắt đầu/kết thúc nào được đưa ra. Mã của bạn với '$ input =" Chắc chắn không phải là một tên lớp hợp lệ! "' Sẽ trả về 1. Nếu bạn thay đổi nó thành 'preg_match ('/^[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0- 9_ \ x7f- \ xff] * $/', $ đầu vào); 'nó trả về 0. –
Cuộc gọi tốt trên dấu phân cách bắt đầu/kết thúc. – nate