2010-11-13 32 views
5

Estoy usando el framework CodeIgniter PHP. Yo uso JS para cargar dinámicamente una página PHP:Permitir cualquier carácter en la URL en CodeIgniter

$('someIFrame').writeAttribute(
    'src', 
    '/index.php/controller/method/' + 
    escape(userGeneratedString) 
); 

Cuando me encontré con esto, CodeIgniter me dio este error:

http://192.168.0.81/index.php/controller/method/dude%27s%20face 
An Error Was Encountered 
The URI you submitted has disallowed characters. 

Esto es totalmente falso ya que la URL en cuestión no contiene ningún carácter no permitidos . Mi archivo de configuración permite que todos los personajes presentes en la URL:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_()@\-'; 

Y compré frustrado y solo permitió que todos los personajes para evitar el error.

// Leave blank to allow all characters -- but only if you are insane. 
// DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!! 
//$config['permitted_uri_chars'] = 'a-z 0-9~%.:_()@\-'; 
$config['permitted_uri_chars'] = ''; 

El mensaje de advertencia sobre esta línea suena aterrador. ¿Qué puede salir mal permitiendo a todos los personajes? ¿Seré pirateado?

+1

@thisMayham Desde ** ** implica que no se preocupan por dar retroalimentación. No es lo mismo, ¿sí? ;) @JoJo Puede aceptar respuestas haciendo clic en el esquema de verificación verde al lado de las respuestas; esto significa que esa respuesta en particular ha ayudado a resolver su problema. Esto le da una pequeña recompensa tanto al que responde como al que pide su esfuerzo, y marca la pregunta como resuelta. –

+0

Consulte también en [security.se]: [** ¿Por qué es peligroso permitir todos los caracteres en una URL? **] (http://security.stackexchange.com/q/133511/12139) – unor

Respuesta

6

Las URL en codeigniter son urldecoded, por lo que %27 se traduce en ' que no estaba en su lista de caracteres permitidos y por lo tanto desencadenó el error. Por lo tanto, debe permitir los caracteres una vez decodificados. En otras palabras, cuando Codeigniter lo ve %27, ya está decodificado en '.

Source

Cuestiones relacionadas