PHP базы данных доступа дезинфицировать инструментарий - PullRequest
0 голосов
/ 27 ноября 2011

В настоящее время я работаю со стандартными библиотечными функциями php для очистки строковых входов для функции mysql_query (не только для удаления полос и mysql_client_encoding, но и для проверки согласованности всего запроса, включая проверку некоторых критических значений полей и проверку некоторых ограничений доступа к таблице)

Мне сказали, что использование сред разработки / библиотек расширений, таких как CakePHP или PEAR, может облегчить мою жизнь при решении этих проблем в любом из моих проектов, независимо от того, насколько они малы.

С моей точки зрения, при выполнении небольших простых проектов все, что добавлено в стандартные библиотеки, может быть сложным в работе и, как правило, не стоит затраченных усилий, но я действительно хочу изучить, какие альтернативы кодировать все с нуля там.

Есть предложения, с чего и с чего начать?

Ответы [ 2 ]

1 голос
/ 27 ноября 2011

Если вы этого еще не сделали, как минимум, рассмотрите возможность использования одного из расширений базы данных , например PDO вместо mysql_query() и все такое. Если вы используете их правильно, у них есть несколько очень полезных функций, таких как очистка запросов для предотвращения внедрения SQL без необходимости запуска mysql_real_escape_string().

1 голос
/ 27 ноября 2011

PHP PDO обрабатывает все санитарные условия с помощью подготовленных запросов. Он уже написан для вас и включен по умолчанию в PHP> = 5.1. Кроме того, он совместим с несколькими механизмами БД (MySQL, MsSQL, Oracle, PostgreSQL, SQLite и т. Д.) И добавляет поддержку транзакций.

//Works for
$id = 23;
$id = 'harmless string';
$id = '0 OR WHERE 1 = 1 --';

$pdo = new PDO('mysql:host=localhost', $username, $password);
$stmt = $pdo->prepare('SELECT title, body FROM posts WHERE id = :id');
$stmt->execute(array(
    ':id' => $id  // Automatically handles sanitizing 
));
$results = $stmt->fetchAll();
...