$ _GET пойдите оно я не функционирует

У меня есть следующий код в php

$sql = "SELECT * FROM categorias WHERE categoria_id='{$_GET['id']}'";
$resultado = mysqli_query($con, $sql);

if (mysqli_num_rows($resultado) > 0) {
    while ($row = mysqli_fetch_assoc($resultado)) {
//...    

Что я буду вредить

0
задан 09.08.2016, 16:09
3 ответа

Если ты помещаешь sgte, оно ты функционировало бы используя только php

$sql =  "SELECT * FROM categorias WHERE categoria_id='".$_GET["id"]."'";

но это принесло бы тебе проблемы вставки sql, ты мог бы делать это таким образом, как это говорит соединение http://blog.aulaformativa.com/como-evitar-una-inyeccion-sql-en-php/

2
ответ дан 24.11.2019, 13:41
  • 1
    Это позволяет SQL injection, не должен быть использованным эксперт и # 237;. Быть должным и # 237; схвати объяснять тему и поставлять альтернативы. – rnrneverdies 09.08.2016, 16:17
  • 2
    Discula, Если уже я понял, состоит в том, что он думал, что единственный хотел заставить это функционировать, я до сегодняшнего дня он это делал таким образом, хороший нужно принимать во внимание безопасность – Kpeski2814 09.08.2016, 16:28

Хороший, чтобы предотвращать темы вставки, потому что ты не делаешь что-то как это предполагая, что прибывает ясное число эта.

$categoria_id = (int)$_GET["id"];
if($categoria_id > 0 && is_numeric($categoria_id)){
  $sql =  "SELECT * FROM categorias WHERE categoria_id=".$categoria_id; 
}

я заношу в список.

2
ответ дан 24.11.2019, 13:41

Есть два вопроса с твоим кодом, одна из безопасности, другой синтаксиса.

Сначала ты позволяешь вставку кода SQL, потому что ты не санкционируешь, ни выдавая GET, и это самое легкое для того, чтобы быть злоупотребленным, так как только они были бы должны добавлять? пойдите = ''); DROP table users;-

Я рекомендую тебя используй функции filter_var или наиболее еще: filter_input

$filteredId = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
// te devuelve el entero si pasa el filtro,
// o false si no lo pasó, entonces puedes
// rechazar la entrada o abortar
if(is_null($filteredId) || $filteredId === FALSE) {
   exit('Dato no valida');
}
// ahora sí, usamos el dato filtrado

Сейчас с темой синтаксиса, чтобы интерполировать переменную, он правилен, если он состоит в том, чтобы взбираться (это не array) на делать это таким, как в твоем коде:

$sql = "SELECT * FROM categorias WHERE categoria_id='$filteredId'";

Но если ты на самом деле хочешь произойти член array, он проще:

$sql = "SELECT * FROM categorias WHERE categoria_id='$array[id]'";

И мы настаиваем: избеги принимать во что бы то ни стало переменные, которыми могут манипулировать пользователи, без фильтра и утверждения.

0
ответ дан 24.11.2019, 13:41