Actualmente estoy trabajando en un framework MVC Style para una empresa y por razones de seguridad necesito asegurarme de que el controlador/método que pasa a través de Query String sea válido para el RFC (que no puedo encontrar).Validar nombres de clase/método con regex
tengo que ser capaz de validar/desinfectar los nombres de clases de acuerdo a lo que está permitido por el intérprete PHP
Por ejemplo:
class SomEFunk__YClAssName extends Controller
{
}
necesito algún tipo de expresiones regulares que validará SomEFunk__YClAssName
y desinfectar ¡si es necesario! Este es también el mismo principio que los métodos.
hay un par de cosas a tener en cuenta, como
- Numerics al inicio
- sólo subraya permitió
- Ciertos PHP caracteres especiales que se le permita.
Cualquier información sobre esta o posibles expresiones sería realmente útil.
Aquí es un poco de mi Código router para que pueda ver donde tengo que ponerlo en práctica:
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;
}
podrás ver el comentario "Higiénico" donde se necesita el cheque.
Gracias por el ejemplo de código y el enlace de documentación. Lo hubiera marcado como la respuesta. – Xunnamius
** Atención **: creo que hay un defecto en su 'preg_match', ya que no se da ningún delimitador de inicio/final. Su código con '$ input =" ¡Definitivamente no es un nombre de clase válido! '' Devolverá 1. Si lo cambia a 'preg_match ('/^[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0- 9_ \ x7f- \ xff] * $/', $ input); 'devuelve 0. –
Buena llamada en el delimitador de inicio/finalización. – nate