Posible inyección a PHP DOP

-1

El experto dice que la DOP es una de las secuencias de comandos seguras de mysql injection. He leído el manual al respecto y hago una pequeña investigación. Y aquí, estoy tratando de obtener el valor de ID del parámetro de URL, como en:

<?php
include("pdo_con.php");

if (isset($_GET['id'])){
    $id=$_GET['id'];
    $id=strip_tags($id);
    }
    $sth = $mydb->prepare("SELECT * FROM ra_articlez WHERE id=:id");
    $sth->execute(array(':id' => $id ));
    $result = $sth->fetch(PDO::FETCH_ASSOC);
    if ($result>0){
        $updatedb = $mydb->prepare("UPDATE ra_articlez SET count=count+1 WHERE id=:id");
        $updatedb->bindParam(':id', $id);
        $updatedb->execute();
        }
?>

a partir de los códigos anteriores, el enlace con ese parámetro es así:

www. website . com/article.php?id=1

¿Ya está seguro? ¿Tengo que agregar un atributo, digamos, strip_tags, entidades html? o para declarar intval antes del ID en ..... WHERE id ...... ? Cualquier ayuda sería muy buena! Gracias.

    
pregunta Herman Nz 05.03.2015 - 03:16
fuente

1 respuesta

2
  

¿Ya está seguro?

Sí, usaste las declaraciones preparadas correctamente, y con todo lo que sabemos ahora, eso debería ser seguro (asumiendo que no usas algunas extraño conjunto de caracteres multibyte ). Si se encuentran problemas de seguridad en el PDO en el futuro, probablemente lo escuchará y, si actualiza su software con regularidad, debería solucionarse en un tiempo razonable.

  

¿Tengo que agregar un atributo, por ejemplo, strip_tags, html entes?

No tienes que hacerlo, y tampoco deberías. No debe cambiar los datos cuando lo inserte en la base de datos, ya que esto solo provocará problemas más adelante.

strip_tags y htmlentities se usan para prevenir XSS (aunque no debes usar strip_tags ), que es un ataque que ocurre cuando se imprimen datos al usuario, no cuando se insertan en la base de datos. Y ahí es donde debe defenderse (esto conduce a datos más limpios, códigos más limpios y mejor seguridad).

  

o declarar intval antes de la ID

Puedes usar algo como is_numeric($input) o algo como (int) $input == $input . No es una mala idea desde un punto de vista de UX (puedes informar algo como Only integers are acceptable , y no es malo como defensa en profundidad (aunque tampoco es necesario).

  

¿Qué pasa con el uso de SSL más scripts PDO?

SSL es algo completamente diferente. No protegerá su servidor de los ataques en absoluto, pero protegerá a sus usuarios (tenga en cuenta que probablemente usted también sea un usuario) contra los ataques de personas en el medio (que, por ejemplo, pueden usarse para robar sus contraseñas o leer datos privados) . Si tiene datos confidenciales y / o un formulario de inicio de sesión, puede ser una buena idea usar SSL / TLS.

Lo que le otorgaría seguridad adicional contra los ataques sería un firewall de nivel de aplicación como mod_security, que básicamente compara todas las entradas con un par de expresiones regulares para encontrar y prevenir ataques (no debe confiar en esto, es solo un complemento adicional). capa de seguridad).

    
respondido por el tim 05.03.2015 - 14:17
fuente

Lea otras preguntas en las etiquetas