No estoy seguro de a qué excepciones se refiere el manual cuando se trata de hacer que los datos sean seguros. Se podría decir que la excepción es cuando los datos ya se sabe que son seguros. Por ejemplo, aquí hay algunos casos que vienen a la mente:
- los datos se escribe como un número (esto es realmente una especialización del siguiente punto)
- que ya sabe que no contiene ningún carácter que necesita ser escapado (por ejemplo, se trata de buscar algo en una matriz de "lista blanca" que contiene algunas opciones que usted codificados)
Por ejemplo, si usted tiene $id = intval($_GET['id'])
entonces no es necesario para escapar $id
antes de inyectarlo en una consulta.
¡Sin embargo! Nunca le puede hacer daño escaparse entrada, y hacerlo elimina la posibilidad de que introduzca vulnerabilidades en su código (por ejemplo, si olvida escaparse, si los requisitos cambian, o algo realmente). Por lo tanto, recomiendo adquirir el hábito de escapar de todo y olvidarse de las "excepciones".
En cuanto a los %
y _
personajes como parte de la entrada, éstos no necesitan ser escapado a menos que se va a alimentar a esta entrada a un comando que les reconoce. Así, por ejemplo, si tiene una consulta como esta:
$term = $_GET['term'];
$sql = sprintf("SELECT FROM table WHERE column LIKE '%%s%'",
mysql_real_escape_string($term));
En este caso, si el usuario escribe una %
como parte de $term
que es razonable suponer que quieren buscar en realidad para un literal %
. Por lo tanto, en tales casos, debe escapar %
reemplazándolo por \%
(\
es el carácter de escape predeterminado). str_replace
o strtr
son dos buenas opciones para esto.
Debe usar [PDO] (http://php.net/manual/en/book.pdo.php). Hacer su sitio web personal es una gran oportunidad para aprenderlo. – kapa
El punto 2 se refiere a las cláusulas 'LIKE', y no es relevante para usar datos de cadena en otros contextos. – mario
una de las excepciones podría ser una cadena ya escapada. – hjpotter92