mysqli中的安全性


Security in mysqli

所以我试着开始使用mysqli来提高安全性,这就是我目前所拥有的:一个conectar.php文件

<?php
$DBServer = 'X'; // ip o lo que sea
$DBUser   = 'X';
$DBPass   = 'X';
$DBName   = 'X';
 $conn = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
 if ($conn->connect_error) {
 trigger_error('Database connection failed: '  . $conn->connect_error, E_USER_ERROR);
  }
   ?>

然后是一个php文件,其中包含以下代码:

include("admin/conectar.php");
$categoria = $_GET['categoria'];
if($categoria){
 $query_p = $conn->query("SELECT * FROM `productos` WHERE `categoria` = '$categoria'     ORDER BY nombre ASC");
while($result_p = $query_p->fetch_object()){
$nombre = $result_p->nombre;
$referencia = $result_p->referencia;;
$descripcion = $result_p->descripcion; 
$imagen = $result_p->imagen;

我应该怎么做才能防止黑客攻击或SQL注入??我是否应该设置一个数组,以便只接受$categoria的某些值?谢谢

永远不要将这样的GET变量用作SQL查询中使用的变量,因为有人可能会将GET变量的值更改为例如"DROP TABLE…"。为了提高代码的安全性:

  • 思考准备好的陈述
  • 使用mysql_real_escape_string或mysqli::real_escape/string