¿Cómo logra thinkphp una prevención segura de la inyección de SQL?
La inyección suele ser causada por el ensamblaje directo de condiciones y declaraciones con parámetros ingresados por el usuario sin ningún procesamiento.
Código de muestra:
/Ejemplo de escritura insegura 1
$_GET['id']=8 //quiero obtener un número entero positivo p >
$data=M('Miembro')-gt;where('id='.$_GET['id'])-gt;find();
$_GET[' id ']='8 or status=1'; //Trampa: construir condiciones de consulta con formato incorrecto para inyección;
//Escritura de reemplazo segura
$data=M('Miembro') -gt;where(array('id'=gt;$_GET['id']))-gt;find();
$data=M('Miembro')-gt ; array('id'=gt; (int)$_GET[' id']))-gt; find(); //restricción de tipo
$data=M('Miembro') -gt; donde('id='.intval($_GET['id']))-gt;find();//conversión de tipo
$data=M('Miembro')-gt ; array('id'=gt; I('get.id', '', 'intval')))-gt; find(); //mi escritura habitual
$data= M(' Miembro')-gt; donde(array('id'=gt;':id'))-gt; bind(':id', I('get.id'))-gt; Los controladores PDO pueden utilizar el enlace de parámetros
$data=M('Member')-gt; donde("id=d", array($_GET['id']))- gt; ; // Mecanismo de preprocesamiento
//Ejemplo de escritura insegura 2
$_GET['id']=8 // Espera un número entero positivo p>
$data =M()-gt; query('SELECT * FROM `miembro` WHERE ?id='.$_GET['id']); //Instrucción SQL ejecutada
$_GET['id'] ='8 ? UNION SELECT * FROM `member`';;//Peligro potencial: construir declaraciones mal formadas para inyección;
2. El principio general para prevenir la inyección es :lt;lt;Dependiendo del específico La lógica empresarial, el rango, el tipo y el valor del valor del usuario no siempre se especifican. El principio general para evitar la inyección es limitar y juzgar el rango, tipo, signo, etc. de los valores de los usuarios en función de una lógica empresarial específica y, al mismo tiempo, intentar utilizar el SQL que viene con las funciones y la escritura de THINKPHP. métodos gt;gt;.
3. Los pasos en THINKPHP 3.2 son:
Uno: Agregar configuración en el archivo de configuración del proyecto: DEFAULT_FILTER' =gt; 'htmlspecialchars', //función de filtro predeterminada
Dos: utilice el método I en el marco para obtener datos de los envíos de los usuarios
Ejemplo: M('Member')-gt; save(array('content' =gt; I(' post .content'))); Esto agregará contenido procesado usando htmlspecialchars.
4. Agregue la configuración httponly para COOKIE
5. La última versión de thinkphp ya admite este parámetro.
6. Nuevas características de HTML5 dignas de atención:
9. Filtrado de texto enriquecido
El filtrado de texto enriquecido es el tema más problemático para los ataques XSS, no solo para Los sitios web pequeños, incluso gigantes como BAT, sufren plagas todos los días.