Скрытие PHP URL-параметров, которые поступают из базы данных - PullRequest
0 голосов
/ 11 мая 2018

так что я новичок в PHP, и я пытаюсь защитить свои параметры URL, которые используют PHP для получения уникальных страниц, и в настоящее время они открыты для межсайтового скриптинга и задаются вопросом, как я могу это исправить?

 <?php  if ($result = $link->query("SELECT league_name, role, start_date, 
 end_date, joincode, active
            FROM leagues
            WHERE unique_id='$unique_id'", MYSQLI_USE_RESULT))


            while($row = $result->fetch_assoc()){ ?>
              <tbody>
             <tr>
              <td scope="row" data-label="League Name"><a class="action" href="leagueinfo.php?league_name=<?php echo $row['league_name']; ?>&joincode=<?php echo $row['joincode']; ?>"><?php echo $row['league_name'] ?></a></td>

             </tr>
            <?php }  $result->close(); ?>
          </tbody>
              </table>

              <?php mysqli_close($link); ?>

Поэтому мне нужно найти способ убедиться, что этого не произойдет:

Script has been entered into url

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Существует несколько различных значений, которые необходимо кодировать:

  • $unique_id должно быть экранировано для MySQL или вместо этого должен быть параметризован запрос.(См. подготовленные операторы .)

  • league_name и joincode внутри URL должны быть закодированы в URL, что также приводит к удалению специальных символов html.(См. rawurlencode )

  • league_name в тексте привязки должен быть в кодировке html (см. htmlspecialchars ).

0 голосов
/ 11 мая 2018

Вы можете использовать PDO, подготовленные операторы обеспечивают хороший способ защиты от внедрения SQL: 1. Подготовьте запрос с пустыми значениями в качестве заполнителей. 2. Привязать значения к заполнителям. 3. Выполните ваш запрос.

//PDO
$stmt = $link->prepare("SELECT league_name, role, start_date, end_date, joincode, active FROM leagues WHERE unique_id=:id");
$stmt->bindParam(':id', $id);
$stmt->execute();
...