Inyección SQL codeigniter PHP (MSSQL) [duplicado]
Estaba recibiendo el informe que muestra que mi consulta tiene inyección SQL, necesitaría su ayuda para verificar algún problema:
- Estaba usando esto como la declaración de inserción
function insert($table_name, $insert_data)
{
$this->db->set($insert_data);
if ($this->db->insert($table_name)) {
return TRUE;
} else {
return FALSE;
}
}
por ejemplo:
$name = 'iamklll'; $status = 1;
$insert_data = array( 'name' => $name,
'status' => $status, ); $this->model->insert('table', $insert_data);
¿Este tipo de método no puede evitar la inyección de SQL? Si esto no puede evitar, creo que la mejor manera son los enlaces de consulta.
¿Cómo evito la inyección SQL si $ POST ['columna'] es una matriz?
¿Cómo almacenar los datos como si la persona los insertara
test"><h1>eee</h1>? ¿Debo usarhtmlspecialcharspara almacenar en la base de datos?
Respuestas
En su caso, está utilizando el generador de consultas $ this-> db-> insert (), esto genera una cadena de inserción basada en los datos que proporciona y ejecuta la consulta. Puede pasar una matriz o un objeto a la función. Todos los valores se escapan automáticamente produciendo consultas más seguras.
En realidad, esta es la mejor opción en mi opinión. Mejor que usar los enlaces de consulta, especialmente porque a largo plazo es posible que deba cambiar de MSSQL a mySQL o cualquier otro motor y no necesitará cambiar nada en su código.
Dado que está utilizando codeigniter 3, asegúrese de validar sus datos antes de insertarlos.
Utilice la validación del formulario para eso: https://codeigniter.com/userguide3/libraries/form_validation.html?highlight=form%20validation
Por su ejemplo, creo que también se está refiriendo a los ataques xxs. Si es así, tiene dos opciones, puede hacer esto mientras valida sus datos con la validación del formulario usando la regla XSS. O puede activar esto globalmente en su aplicación / config / config.php
$config['global_xss_filtering'] = true;
Dado que estamos hablando de proteger su aplicación, es posible que también desee considerar el uso de la configuración de csrf en codeigniter. Esto también se puede hacer en su archivo config.php.
/*
|--------------------------------------------------------------------------
| Cross Site Request Forgery
|--------------------------------------------------------------------------
| Enables a CSRF cookie token to be set. When set to TRUE, token will be
| checked on a submitted form. If you are accepting user data, it is strongly
| recommended CSRF protection be enabled.
|
| 'csrf_token_name' = The token name
| 'csrf_cookie_name' = The cookie name
| 'csrf_expire' = The number in seconds the token should expire.
| 'csrf_regenerate' = Regenerate token on every submission
| 'csrf_exclude_uris' = Array of URIs which ignore CSRF checks
*/
$config['csrf_protection'] = true; $config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name'; $config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = true; $config['csrf_exclude_uris'] = array();
Entonces, en su caso, usar el generador de consultas está bien para evitar la inyección SQL de eso es lo que realmente está buscando.
Te refieres a la clase Active Record. Tiene su propio generador de consultas y se supone que lo protege de las inyecciones de SQL desde la caja.
How to store the data as if the person insert test"><h1>eee</h1>
Creo que te refieres al ataque XSS. Creo que la mejor práctica es eliminar todas las etiquetas excepto las permitidas . No creo htmlspecialcharsque tenga mucho sentido aquí mientras vas a realizar una conversión hacia atrás en la salida.