Как обезопасить себя и избежать SQL-инъекции?

Пожалуйста, просмотрите мой код для атак с использованием SQL-инъекций. Пожалуйста, помогите мне избежать атак SQL-инъекций. Знание меня о SQL-инъекции. Безопасен ли этот код при SQL-инъекции?

<?php

$recno=$_GET['recno'];
$sql = 'set @parameter = (
    select group_concat(distinct
        concat(
            "sum(case when `parid`=\'", `parid`, "\' then `par_values` end) 
               as `", `parid`, "`"
        )
    )
    from #est_paaram_value
    where recno = "'.$recno.'"
);
set @parameter = concat("select year as YEAR,qtr as QUARTER, ", @parameter, " 
from #est_paaram_value where recno=\''.$recno.'\' group by `year`,qtr");
prepare stmt from @parameter;
execute stmt;';
$result = $con->multi_query($sql);

if ($err=mysqli_error($con)) { echo $err."<br><hr>"; }
if ($result) {
  do {
  if ($par = $con->store_result()) {
      echo "<table id='myTable' name='myTable'>";
      echo "<thead><tr>";
       for($i=0; $i<mysqli_num_fields($par); $i++)
      {
          $field = mysqli_fetch_field($par);
          echo "<td bgcolor=lightgray><b>{$field->name}</b></td>";
      }
      echo "</tr>\n</thead>";
      echo "<tbody>";
      while($row = $par->fetch_row())
      {
          echo "<tr>";
          foreach($row as $par_val) {
            if ($par_val === NULL) { $par_val = '(null)'; }
            echo "<td>$par_val</td>";
          }
          echo "</tr>\n";
      }
      $par->free();
      echo"</tbody>";
      echo "</table>";
    }
  } while ($con->more_results() && $con->next_result());

}

Какой продукт базы данных вы используете? Как правило, используйте параметризованные запросы, а не конкатенированные строки.

Tim Schmelter 18.06.2018 11:37

Это похоже на код PHP. Прочтите о подготовленных операторах в PHP.

Tim Biegeleisen 18.06.2018 11:39

да, это PHP-код. Я ничего не знаю о sql-инъекции. этот код был сводной таблицей. есть ли возможность ввести запрос?

Ivan Cayabyab 18.06.2018 11:41

Я использую базу данных mysql.

Ivan Cayabyab 18.06.2018 11:43

1. Используйте параметры вместо интерполяции переменных PHP в строку SQL. См. Примеры в stackoverflow.com/questions/60174/… 2. Не используйте mysqli::multi_query().

Bill Karwin 18.06.2018 20:26
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
6
40
0

Другие вопросы по теме