Я не имею опыта с mysql или php, и я продолжаю упоминать, что в моих вопросах, но люди продолжают говорить, что вам нужна защита от инъекций mysql, и я искал ее, и я действительно не понимаю. Может кто-нибудь мне помочь? Я так новичок в mysql, и у меня проблемы с ним
Вот мой код:
как это может быть улучшено? Когда я перехожу к просмотру исходного кода, щелкнув правой кнопкой мыши на сайте, ни один из php / mysql не появится.
<?php $conn = mysql_connect("", "", ""); if (!$conn) { echo "Unable to connect to DB: " . mysql_error(); exit; } $search = "%".$_POST["search"]."%"; $searchterm = "%".$_POST["searchterm"]."%"; if (!mysql_select_db("")) { echo "Unable to select mydbname: " . mysql_error(); exit; } $sql = "SELECT name,lastname,email FROM test_mysql WHERE name LIKE '%".$search."%' AND lastname LIKE '%".$searchterm."%'"; $result = mysql_query($sql); if (!$result) { echo "Could not successfully run query ($sql) from DB: " . mysql_error(); exit; } if(empty($_GET['search'])){ // or whatever your field's name is echo 'no results'; } else { performSearch(); // do what you're doing right now } if (mysql_num_rows($result) == 0) { echo "No rows found, nothing to print so am exiting"; exit; } while ($row = mysql_fetch_assoc($result)) { echo '<br><br><div class="data1">'; echo $row["name"]; echo '</div><br><div class="data2">'; echo $row["lastname"]; echo '</div><br><div class="data3">'; echo $row["email"]; echo '</div>'; } mysql_free_result($result); ?> 
       
		SQL-инъекция – это имя атаки, но основной проблемой является недостаточная проверка ввода . Возьмите следующий код:
 $search = $_POST['search']; $sql = "SELECT name,lastname,email FROM test_mysql WHERE name LIKE '%".$search."%'"; $result = mysql_query($sql); 
  Что произойдет, если кто-нибудь войдет в O'Reilly в форме поиска? 
Ну, запрос в конечном итоге строится как:
 SELECT name, lastname, email FROM test_mysql WHERE name LIKE '%O'Reilly%' 
  Это недействительный SQL-запрос, но просто приведет к сообщению об ошибке.  Поэтому ваш код не работает ;  он не может обрабатывать входные данные, содержащие ' . 
  Теперь, давайте рассмотрим злонамеренного человека, Мэллори.  Причинение ошибки не помогает Мэллори в его злых путях, если он не хочет подчеркнуть администраторов баз данных, которые читают все журналы ошибок.  Он вводит: %'; INSERT INTO test_mysql name,lastname,email VALUES('mal','ory','malory@evil.com');--  %'; INSERT INTO test_mysql name,lastname,email VALUES('mal','ory','malory@evil.com');--  Теперь полный запрос SQL 
 SELECT name, lastname, email FROM test_mysql WHERE name LIKE '%%'; INSERT INTO test_mysql name,lastname,email VALUES('mal','ory','malory@evil.com'); --%' 
Последняя строка – комментарий и игнорируется. Мэллори теперь может писать произвольные вещи в базу данных!
  Обратите внимание, что для этого требуется возможность выполнить более одной команды в одном MySQL.  Если эта функция не включена, Мэллори должен прибегать к использованию подзапросов и предикатов.  В некоторых случаях Мэллори не может просматривать всю таблицу (например, он должен иметь возможность просматривать свои покупки в интернет-магазине, а не других клиентов).  Он может просто ввести ' OR ''=' чтобы увидеть весь контент запроса. 
Вы можете защитить себя, либо ускоряя значения, например:
 $search = $_POST['search']; $sql = "SELECT name,lastname,email FROM test_mysql WHERE name LIKE '%". mysql_real_escape_string($search) ."%'"; $result = mysql_query($sql); 
В качестве альтернативы, используйте PDO и подготовленные заявления :
 $sql = "SELECT name,lastname,email FROM test_mysql WHERE name LIKE :search"; $statement = $pdo->execute($sql, array(':search' => '%' . $_POST['search'] . '%')); 
SQL-инъекция лучше всего обобщается этим комиком :

bobby-tables.com объясняет, как защищаться от него на разных языках.
Вам нужно избегать ваших запросов с помощью строки mysql_real_escape:
 WHERE name LIKE '%".mysql_real_escape_string($search)."%' AND lastname LIKE '%".mysql_real_escape_string($searchterm)."%'"; 
Здесь вы можете увидеть примеры для SQL-инъекций: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php
Обратите внимание, что у вас не только SQL-инъекция в вашем примере кода, но также есть дыра безопасности XSS :
Код ужаса
 while ($row = mysql_fetch_assoc($result)) { echo '<br><br><div class="data1">'; echo $row["name"]; echo '</div><br><div class="data2">'; echo $row["lastname"]; echo '</div><br><div class="data3">'; echo $row["email"]; echo '</div>'; } 
  Вы эхом отзываете неанитированный вывод на HTML-страницу. 
  Если пользователь ввел html-код в поля name , name и / или email . 
  Они могут вводить произвольный html на вашу страницу. 
  Это называется скриптовым сервером или XSS. 
Вы должны всегда дезинфицировать результат, который вы эхо:
Безопасный код
 while ($row = mysql_fetch_assoc($result)) { echo '<br><br><div class="data1">'; echo htmlentities($row["name"]); <<-- sanitize your output! echo '</div><br><div class="data2">'; echo htmlentities($row["lastname"]); echo '</div><br><div class="data3">'; echo htmlentities($row["email"]); echo '</div>'; } 
См.: Каковы наилучшие методы предотвращения атак xss на PHP-сайте
Вы должны конкретно посмотреть на эту строку:
 $sql = "SELECT name,lastname,email FROM test_mysql WHERE name LIKE '%".$search."%' AND lastname LIKE '%".$searchterm."%'"; 
Каковы возможные значения, которые пользователи могли бы отправлять в свой почтовый запрос, чтобы сделать это, сделать что-то, чего вы не хотите (например, DROP table!)
Это то, что SQL-инъекция, и если она не защищена от нее, может быть очень вредной.
SQL Injection – это то, где enduser может вставлять SQL-код в ваши запросы и беспорядок с вашими базами данных.
  Например, если вы запускали: UPDATE users SET userID=" + userID + " WHERE id = " + id + ";  ; 
Пользователь может поместить пользователей «; DROP TABLE», так как их ввод для userID и SQL будет выполнять этот запрос точно. Он не может обнаружить «плохой» запрос.
Вы можете защитить себя, используя параметризованные запросы, которые есть несколько способов сделать на PHP, и вы можете просто «sql parameters php» Google.