Атака SQL инъекций - PullRequest
       7

Атака SQL инъекций

5 голосов
/ 29 марта 2011

Как защитить свой сайт от атак с использованием SQL-инъекций? Я использую PHP и MySQL. Должен ли я изменить мой MySQL запрос?

Например, у меня есть один запрос, подобный этому:

<?php
$q=$_GET["q"];// im getting the Q value from the other form,from drop down box[displaying data using Ajax
$a1=$_POST['hosteladmissionno'];
$a2=$_POST['student_name'];
$a3=$_POST['semester'];
$con = mysql_connect('localhost', 'root', '');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("hostel", $con);

$a1="SELECT  hosteladmissionno,student_name,semester FROM registration 
WHERE mess_type ".$q."' AND  status_flag=1";

$result = mysql_query($a1);

if ($result === false) {

    die(mysql_error());
}
echo "<table border='1' width=80%>
<tr>
 <th width=5%> S.No</th>
<th width=10%>H.Admin No</th>
<th width=10%>Student Name</th>
<th width=5%>No of Days</th>
</tr>";
 $i=0;
while($row = mysql_fetch_array($result))
  {
  $i=$i+1;
  echo "<tr>";
  echo "<td  align=center>" .$i."</td>";
  echo "<td size=10 align=center>" . $row['hosteladmissionno'] . "</td>";
  echo "<td size=35  align=center>" . $row['student_name'] . "</td>";
  echo "<td  align=center>  <input type='text' name='days' size=2> </td> ";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);
?>

Нужно ли мне включать какие-либо изменения в мой запрос, чтобы избежать атак инъекций? Любое предложение будет полезно. Спасибо заранее. Ура! * * 1006

Ответы [ 6 ]

3 голосов
/ 29 марта 2011

Ваш запрос (EDIT: появился, в первой версии запроса) является полностью статичным - то есть он не использует предоставленные пользователем данные. В этом случае нет риска внедрения SQL.

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

РЕДАКТИРОВАТЬ: Хорошо, теперь вы изменили свой код, в том числе:

$a1="SELECT  hosteladmissionno,student_name,semester FROM registration 
WHERE mess_type ".$q."' AND  status_flag=1";

Где $q извлекается из текстового поля. Теперь я предполагаю, что вы действительно имели в виду вторую строку:

WHERE mess_type='".$q."' AND  status_flag=1";

Но это все еще уязвимо для атаки SQL-инъекцией. Предположим, значение q:

' OR 'x'='x

Тогда ваш оператор SQL будет иметь вид

SELECT hosteladmissionno,student_name,semester FROM registration 
WHERE mess_type='' OR 'x'='x' AND  status_flag=1

что явно не соответствует логике, которую вы преследуете.

Вы должны использовать параметры для значений, как показано на этой подготовленной PHP странице оператора .

2 голосов
/ 29 марта 2011

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

Поскольку в этом запросе вы вообще не используете никаких переменных, вы не можете этого делать, поэтому это безопасно.

См. http://bobby -tables.com / для дальнейшего чтения.

0 голосов
/ 29 марта 2011

, хотя ваш запрос достаточно безопасен, но если вы все еще подозрительны, тогда выполните приведение типа (int) (путь php) или CAST (путь mysql) с именем поля, которое является целочисленным типом в вашей таблице и т. Д.

0 голосов
/ 29 марта 2011

Согласно Википедии (да благословит Бог Google):

SQL-инъекция - это метод внедрения кода, использующий уязвимость безопасности, возникающую на уровне базы данных приложения.Уязвимость присутствует, когда пользовательский ввод либо неправильно фильтруется для строковых буквенных escape-символов, встроенных в операторы SQL, либо пользовательский ввод не является строго типизированным и, следовательно, неожиданно выполняется.Это пример более общего класса уязвимостей, которые могут возникать всякий раз, когда один язык программирования или сценариев встроен в другой.Атаки SQL-инъекции также известны как атаки SQL-вставки.

http://en.wikipedia.org/wiki/SQL_injection

0 голосов
/ 29 марта 2011

Поместите это над вашей частью mysql_selected_database вашего скрипта

$qtitle = addcslashes(mysql_real_escape_string($cleantitle),'%_');

Где $ cleantitle - это исходное значение, которое вы извлекаете из формы

Если вы используете формы, которые ..

0 голосов
/ 29 марта 2011

Мне дали совет использовать подготовленные высказывания.На практике это легко сделать, используя один из превосходных уровней абстракции базы данных:

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