X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Проверялки
Salikhoff_hb
Salikhoff_hb
Topic Starter сообщение 13.3.2011, 11:32; Ответить: Salikhoff_hb
Сообщение #1


хеллоу народ. В общем дошла очередь моего проекта до бета доработки. и вот я хотел бы посоветоваться с вами какие проверки можно поставить в этот код!? [PHP]<?php
include_once ('main/config.php');
if(isset($_POST['url']) && !empty($_POST['url']) && isset($_POST['title']) && !empty($_POST['title']) && isset($_POST['section']) && !empty($_POST['section']) && isset($_POST['info']) && !empty($_POST['info']) && isset($_POST['keywords']) && !empty($_POST['keywords'])){
if ($_POST['url']!=''){
$url = trim($_POST['url']);
$url = stripslashes($_POST['url']);
$url = htmlspecialchars($_POST['url']);
$url = strtolower($_POST['url']);
if (substr($_POST['url'],0,7)!='http://'){$_POST['url']='http://'.$_POST['url'];}
$ok = mysql_query("SELECT url FROM catalog WHERE url=('".$url."')", $db);
if (mysql_num_rows($ok)==0){
$result = mysql_query("INSERT INTO catalog (`section`, `url`, `title`, `info`, `keywords`) VALUES ('".(int)$_POST['section']."', '".$_POST['url']."', '".$_POST['title']."', '".$_POST['info']."', '".$_POST['keywords']."')");
if (!$result){
echo "URL-адрес не добавлен. Сбой в системе!";
}
else{
echo "URL-адрес добавлен!";
}
}
else{
echo "URL уже зарегистрирован в системе!";
}
}
else{
echo "Пустое поле для URL.";
}
}
?>[/PHP] а также у кого какие предложения по его улучшению?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
www3_hb
www3_hb
сообщение 13.3.2011, 12:17; Ответить: www3_hb
Сообщение #2


Ну для ночала надо защитить базу от инъекции
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Salikhoff_hb
Salikhoff_hb
Topic Starter сообщение 13.3.2011, 12:26; Ответить: Salikhoff_hb
Сообщение #3


www3, раз, еще что? чистить от разных тегов два, выводить больше ошибок три, ограничить ввод в бд символов для каждого поля четыре. еще что?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
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
NiKON_hb
сообщение 13.3.2011, 16:16; Ответить: NiKON_hb
Сообщение #5


Как правильно заметил Apay, для защиты от иньекций не нужно ничего кроме mysql_real_escape_string. Не выдумывайте супер процедуры.... Для чисел intval думаю подойдет...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Witu
Witu
сообщение 13.3.2011, 17:07; Ответить: Witu
Сообщение #6


интв вал проверяет только целочисленные значения. лучше использовать is_numeric()
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
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
Salikhoff_hb
Topic Starter сообщение 15.3.2011, 20:24; Ответить: Salikhoff_hb
Сообщение #8


Mulder, да я как бы логи пока не собирался писать. а процессе beta тестирования подойдут логи апача! или я чет загнался, но спасибо на этом может еще кто что подскажет?

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 16.4.2024, 19:16
Дизайн