Как я могу использовать HTML-теги в MySQL, результат использует подготовленные операторы? - PullRequest
0 голосов
/ 05 июля 2019

Я недавно заметил о взломе, известном как (SQL-инъекция).Я использовал подготовленные заявления, чтобы избежать этих атак.это код, который я использую:

<?php
    session_start();
    if($_SERVER["REQUEST_METHOD"] == "POST"){
    include "inc/config.php";
    $stmt = $link->prepare("UPDATE crany_cranies SET crany_bio=?  WHERE crany_id=? ") ;
    $stmt->bind_param("si", $bio,  $id);
    
    $id= test_input($_REQUEST['id']) ;
    $bio= test_input($_POST["bio"]);
    $stmt->execute();
    
    $stmt->close();
    $link->close();
    }
    
    ?>

  <form action=editbio.php?id=<?php echo $_REQUEST[ 'id']; ?> method="post">
    <?php
    include "inc/config.php";
    $id= test_input($_REQUEST['id']);
    $sql = "SELECT crany_bio, crany_keeper FROM crany_cranies WHERE crany_id=$id";
    $result = $link->query($sql);
    
    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
    //first
    if($row["crany_keeper"] != $_SESSION["id"]){
    header("location: index.php");
    }
    else{
    echo "you can use HTML tags only<br>";
    echo "<textarea name='bio' style='width:530px; font-size:11px; resize:none' cols='50' rows='15'>";
    echo $row["crany_bio"];
    echo "</textarea>";
    echo "<br><input type='submit'>";
    }
      }
    } else {
        echo "Invalid id";
    }
    $link->close();
    
    function test_input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
    }
    
    ?>

  </form>

для редактирования биографии, и я использовал подготовленные операторы для первого кода SQL.и работает нормально.Но я получил новую проблему, которая не форматирует теги HTML.и выводит все, что мы пишем в текстовой области

Я использовал эти теги HTML и работал хорошо, прежде чем использовать подготовленные заявления

<h2 style="color: white">xX Ammo Xx</h2>
<img src="http://68.media.tumblr.com/262aa3340cb98888f837e3fd82a214bd/tumblr_inline_nwr25xwGEf1sgemal_250.png">
<br>
<img src="flag/electric.png">
<br>
<p onclick="hideit()" id="click">click here!</p>
<img src="https://i.imgur.com/BSlHmyz.png">
<br> By <a href="http://flightrising.com/main.php?p=lair&tab=userpage&id=361930">Beppers!</a>
<script>
  function hideit() {
    document.getElementById("click").style.display = "none";
  }
</script>

есть ли коды для форматирования тегов?Спасибо

1 Ответ

0 голосов
/ 21 июля 2019

Чтобы позволить пользователю вводить HTML, рекомендация состоит в том, чтобы хранить данные, введенные в базу данных, как есть, и кодировать их, скажем, с помощью htmlspecialchars в текстовой области. Когда вы хотите отобразить его как HTML, вы отображаете его как есть без кодировки htmlspecialchars . Вы создаете новую уязвимость в системе безопасности, известную как уязвимость XSS инъекция , поскольку ничто в вашем коде не помешает им ввести javascript.

<?php
    session_start();
    if($_SERVER["REQUEST_METHOD"] == "POST"){
    include "inc/config.php";
    $stmt = $link->prepare("UPDATE crany_cranies SET crany_bio=?  WHERE crany_id=? ") ;
    $stmt->bind_param("si", $bio,  $id);
    
    $id= test_input($_REQUEST['id']) ;
    $bio= test_input($_POST["bio"]);
    $stmt->execute();
    
    $stmt->close();
    $link->close();
    }
    
    ?>

  <form action=editbio.php?id=<?php echo $_REQUEST[ 'id']; ?> method="post">
    <?php
    include "inc/config.php";
    $id= test_input($_REQUEST['id']);
    $sql = "SELECT crany_bio, crany_keeper FROM crany_cranies WHERE crany_id=$id";
    $result = $link->query($sql);
    
    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
    //first
    if($row["crany_keeper"] != $_SESSION["id"]){
    header("location: index.php");
    }
    else{
    echo "you can use HTML tags only<br>";
    echo "<textarea name='bio' style='width:530px; font-size:11px; resize:none' cols='50' rows='15'>";
    echo htmlspecialchars($row["crany_bio"]);
    //     ^^^   HTML Tags will break the textarea if not encoded
    echo "</textarea>";
    echo "<br><input type='submit'>";
    }
      }
    } else {
        echo "Invalid id";
    }
    $link->close();
    
    function test_input($data) {
      // $data = trim($data);
      // $data = stripslashes($data);
      // $data = htmlspecialchars($data);
      //  ^^^ Don't encode data before it goes into the database
      return $data;
    }
    
    ?>

  </form>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...