Помощник
|
Проверялки |
Salikhoff_hb
|
Сообщение
#1
|
||
|
|
||
|
|||
www3_hb |
13.3.2011, 12:17;
Ответить: www3_hb
Сообщение
#2
|
|
Ну для ночала надо защитить базу от инъекции
|
|
|
Salikhoff_hb
|
Сообщение
#3
|
|
www3, раз, еще что? чистить от разных тегов два, выводить больше ошибок три, ограничить ввод в бд символов для каждого поля четыре. еще что?
|
|
|
Apay |
13.3.2011, 15:04;
Ответить: Apay
Сообщение
#4
|
|
1)
(' post='105264 @ 13.3.2011, 13:32) [php]isset($_POST['url']) && !empty($_POST['url'])[/php] это масло маслянное, одного !empty достаточно2) stripslashes надо использовать только если эти слеши были добавленны 3) используйте mysql_real_escape_string |
|
|
NiKON_hb |
13.3.2011, 16:16;
Ответить: NiKON_hb
Сообщение
#5
|
|
Как правильно заметил Apay, для защиты от иньекций не нужно ничего кроме mysql_real_escape_string. Не выдумывайте супер процедуры.... Для чисел intval думаю подойдет...
|
|
|
Witu |
13.3.2011, 17:07;
Ответить: Witu
Сообщение
#6
|
|
интв вал проверяет только целочисленные значения. лучше использовать is_numeric()
|
|
|
Mulder_hb |
13.3.2011, 18:27;
Ответить: Mulder_hb
Сообщение
#7
|
|
1. Как уже было сказано, достаточно empty.
2. if ($_POST['url']!='') - не нужно, т.к. уже есть проверка на empty. 3. [PHP]$url = trim($_POST['url']); $url = stripslashes($_POST['url']); $url = htmlspecialchars($_POST['url']); $url = strtolower($_POST['url']);[/PHP] и в итоге в переменной $url содержится результат только последней операции. Предыдущие отсекаются. Тоже самое со всем остальным кодом. Если обработали $_POST['url'] в $url, то используйте везде $url. 4. Для запросов в базу я бы советовал использовать либо свою функцию заполнителей, либо что-нибудь из уже написанных, чтобы не писать везде такую громоздкую конструкцию как mysql_real_escape_string. 5. Не используйте mysql_num_rows() там, где нужно узнать лишь кол-во. Используйте встроенную в мускул функцию COUNT(). 6. Если вы правильно организуете данные в таблице, вам не нужно будет делать запрос на подсчет кол-ва уже существующих адресов. Сразу делайте вставку и если такая запись уже есть, запрос просто вернет false. Итого, ваш код упроститься до понятного: [PHP]<?php require_once ('main/config.php'); if(!empty($_POST['url']) && !empty($_POST['title']) && !empty($_POST['section']) && !empty($_POST['info']) && !empty($_POST['keywords'])) { $url = trim($_POST['url']); $url = htmlspecialchars(strtolower($url)); $section = intval($_POST['section']); $title = trim($_POST['title']); $title = htmlspecialchars($title); $info = trim($_POST['info']); $info = htmlspecialchars($info); $keywords = trim($_POST['keywords']); $keywords = htmlspecialchars($keywords); if (substr($url, 0, 7) != 'http://') { $url = 'http://'.$url; } $result = my_mysql_query("INSERT INTO `catalog` (`section`, `url`, `title`, `info`, `keywords`) VALUES (?, ?, ?, ?, ?)", $section, $url, $title, $info, $keywords); if (!$result) { // Проверка ошибки mysql_error() запись в системный журнал // ... echo "URL-адрес не добавлен."; } else { echo "URL-адрес добавлен!"; } } else { echo "Данные пусты"; }[/PHP] |
|
|
Salikhoff_hb
|
Сообщение
#8
|
|
|
Mulder, да я как бы логи пока не собирался писать. а процессе beta тестирования подойдут логи апача! или я чет загнался, но спасибо на этом может еще кто что подскажет?
|
|
|
||
|
Текстовая версия | Сейчас: 26.4.2024, 7:09 |