2013-04-27 1 views
0

Два связанных вопроса, которые должны быть легкими, хотя мой поиск придумал пустой.Полу-двоеточия в представлениях формы PHP

1) У меня есть на PHP. Если в поле есть точка с запятой, и я делаю дамп $ _POST на странице действия, значение поля усекается в точке с запятой. Я предполагаю, что это связано с безопасностью SQL-инъекций? Но законные полуколоны должны быть разрешены. Есть ли настройка, которая позволяет это пройти? Или мне нужно избежать этого, и если да, то как?

2) Чтобы поймать фактические инъекции SQL, мне не нужно разрешать несколько операторов в одном запросе ... например, «SELECT * FROM table; DROP table». Есть ли параметр, который отключает это, как в PHP, так и в MySQL, но не останавливая законные точки с запятой?

Спасибо.

+1

Я никогда не слышал о проблемах с точкой с запятой. Можете ли вы показать пример того, что вы вводите? –

+0

Кроме того, вам не нужно обнаруживать инъекции SQL, вам нужно сделать все входным. –

+0

У меня пока нет ответа на вопрос 1, но что касается 2, то вы можете использовать подготовленные заявления. –

ответ

1

semi-colons не вызывает никаких проблем.

Используйте подготовленные заявления.

В mysqli:

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); 
$stmt->bind_param('s', $name); 

$stmt->execute(); 

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

В PDO:

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); 

$stmt->execute(array(':name' => $name)); 

foreach ($stmt as $row) { 
    // do something with $row 
} 

Использование mysql_real_escape_string

$unsafe_variable = $_POST["user-input"]; 
$safe_variable = mysql_real_escape_string($unsafe_variable); 

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')"); 

Проверить этот вопрос для получения дополнительной информации How can I prevent SQL injection in PHP?

0

Хорошо, глупо меня. Да, я использую подготовленные заявления, избегаю и т. Д. Но я также хотел дезинформировать вклад, прежде чем он даже доберется до этого. Поэтому у меня есть глобальная функция, которая проверяет все параметры, вынимая что-либо из следующих апострофов и точек с запятой. Прекрасно работает для значений GET, но я забыл, что мне нужно было обновить это, чтобы обрабатывать параметры POST по-разному, и забыл, что это было там, поскольку до сих пор я не вводил полуточку. :) Но спасибо за ответы.