2014-11-04 2 views
-1

Если есть запрос с помощью PHP скрипт, который уязвим какPHP MySQL инъекции SQL выполнить удаление

select email from mytable where id = $_REQUEST['id'] 

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

Этот запрос выполняется с использованием mysql_query(). Не допускается использование нескольких запросов.

Я понимаю, что это уязвимый код. Я хочу знать, может ли кто-то выполнить удаление или усечение. Я хочу знать степень уязвимости

+0

медийная вы запрос на переднем конце? – Gautam3164

+0

Возможный дубликат [Как я могу предотвратить SQL-инъекцию в PHP?] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+0

yes, thera are vulnerabities. вам нужно избегать переменных. – vaso123

ответ

1

уверен, что если вы позволите пользователю свободно заполнить «id».

, например:

$_REQUEST['id'] = 123; delete from mytable where 1; select email from mytable where id = 123; delete from mytable where 1;

и если вы используете multi_query() то второй запрос будет выполнен.

+0

Я использую mysql_query() для выполнения. Невозможно разрешить несколько запросов – Ram

0

Да, это неправильный способ выполнения запросов. Позволяет проверить это следующий пример простой SQL Injection

<?php 
// We didn't check $_POST['password'], it could be anything the user wanted! For example: 
$_POST['username'] = 'aidan'; 
$_POST['password'] = "' OR ''='"; 

// Query database to check if there are any matching users 
$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'"; 
mysql_query($query); 

// This means the query sent to MySQL would be: 
echo $query; 
?> 

Запрос отправляется в MySQL

SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''

Всегда используйте mysql_real_escape_string()

0

Ваш запрос очень уязвимы к SQL инъекции.

Использование подготовленных операторов и параметризованных запросов.

Использование mysqli_, правильный способ сделать это так:

$stmt = $connection->prepare('SELECT email FROM mytable WHERE id = ?'); 

$stmt->bind_param('s', $_REQUEST['id']); 

$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_assoc()) { 
    // do whatever you need with $row 
} 

Вы также можете использовать подготовленные заявления с PDO

Смежные вопросы