¿Este código es seguro para el cuadro de búsqueda o no? [cerrado]

0
$output = '';
if(isset($_POST["query"]))
{
  $output = '';
  $search = "%{$_POST['query']}%";

 $stmt = $con->prepare(" SELECT * FROM tables WHERE cat_name LIKE ?              
 LIMIT 3");

 $stmt->bind_param("s",$search);
 $stmt->execute();
 $result = $stmt->get_result();
 while($row = mysqli_fetch_array($result))
{
$output .= '
<a href="tables.php?id='.$row['cat_id'] .'" 
class="searchLinksStyle w3-col l12  w3-card-4 w3-round-large w3-button" 
>'.$row['cat_name'].'</a>';
 }
echo $output;
    
pregunta Beginner 19.05.2017 - 03:08
fuente

2 respuestas

1
  • Olvidaste html-escape tu salida = > vulnerabilidad potencial XSS
  • Cuando la consulta incluye caracteres como % , se tratarán como caracteres especiales, no como caracteres literales. No conozco las características del motor de comodín de MySQL lo suficiente como para saber si eso permite un ataque DoS (por ejemplo, a través de un seguimiento catastrófico).
respondido por el CodesInChaos 19.05.2017 - 08:35
fuente
1
  • Desde el lado de la inyección SQL, debe estar seguro ya que está preparado.

Consulte la respuesta aceptada aquí .

De la respuesta aceptada:

  

El principio principal es usar una declaración preparada que está diseñada   para enviar consultas seguras al servidor de bases de datos, esto se puede hacer escapando al usuario   entrada que no es parte de la consulta real, y también la comprobación de la consulta   sin ninguna (donde la cláusula) para comprobar la validez de la consulta antes   utilizando cualquier parámetro.

  • La consulta está limitada a tres resultados y tiene un solo valor ( cat_name ), lo que reduce la posibilidad de un ataque de estilo DOS. Como ejemplo:

Si la consulta puede ser forzada a tardar mucho tiempo en ejecutarse, un atacante remoto podría usar muchas conexiones de base de datos y forzar una carga excesiva en su base de datos.

    
respondido por el rjdkolb 19.05.2017 - 06:43
fuente

Lea otras preguntas en las etiquetas