HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 25.04.2009, 13:30
SQLHACK
Голос разума
Регистрация: 27.09.2006
Сообщений: 529
Провел на форуме:
1607210

Репутация: 1617


По умолчанию

Вот вам функция , которой достаточно в 99% случаев.
PHP код:
function db_prepare($arg){
    global 
$db_c;

    if(
is_numeric($arg)){
        return 
"'".$arg."'";
    }else if(
is_string($arg)){
        return 
"'".mysql_real_escape_string($arg$db_c)."'";
    }else{
        return 
"''";
    }

Где $db_c это переменная-ресурс коннекта к БД

ну или вообще убрать его
PHP код:
function db_prepare($arg){
    if(
is_numeric($arg)){
        return 
"'".$arg."'";
    }else if(
is_string($arg)){
        return 
"'".mysql_real_escape_string($arg."'";
    }else{
        return 
"''";
    }

что такое 1% это внесение в БД файлов и всякой нестандартной всячины.

Перез использованием данной фунции должно быть установлено соединение с БД.

Запрос выглядит так
$query = "SELECT a,b,c,d FROM XXXX WHERE id=".db_prepare($id)." order by 1";

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

Юзайте и будет вам счастье.
__________________
Бойтесь своих желаний. Они могут исполниться....

...О-о-о-о, ушами не услышать, глазами не понять!

Последний раз редактировалось SQLHACK; 25.04.2009 в 13:33..
 
Ответить с цитированием

  #2  
Старый 25.04.2009, 13:35
Byrger
Постоянный
Регистрация: 07.03.2008
Сообщений: 479
Провел на форуме:
791766

Репутация: 61
По умолчанию

Оо нифига на 2 страницы растянули : )
Спасибо всем.
А как достать строку из браузера которую пользователь вводит?

Последний раз редактировалось Byrger; 25.04.2009 в 13:42..
 
Ответить с цитированием

  #3  
Старый 25.04.2009, 13:39
Chaak
Познавший АНТИЧАТ
Регистрация: 01.06.2008
Сообщений: 1,047
Провел на форуме:
5321514

Репутация: 3313


По умолчанию

Цитата:
Сообщение от Byrger  
Оо нифига на 2 страницы растянули : )
Спасибо всем.
А как достать строку из праузера которую пользователь вводит?
PHP код:
echo htmlspecialchars($_SERVER); 
не забывай , если в базу заносишь фильтрацию на кавычки

На JavaScript:
PHP код:
alert(document.location.href); 
SQLHACK, твой код тоже уязвим для мультибайтовых кодировок из-за ошибки в mysql_real_escape_string
жмяк

Последний раз редактировалось Chaak; 25.04.2009 в 13:47..
 
Ответить с цитированием

  #4  
Старый 25.04.2009, 13:35
SQLHACK
Голос разума
Регистрация: 27.09.2006
Сообщений: 529
Провел на форуме:
1607210

Репутация: 1617


По умолчанию

имел ввиду функцию mailbrush'a

2 PaCo:
А твой пример с тратата тупо будет заплевывать как как Юзера ошибками, так и БД левыми не рабочими запросами


Действительно куда тебе до меня супер умного ))))
__________________
Бойтесь своих желаний. Они могут исполниться....

...О-о-о-о, ушами не услышать, глазами не понять!

Последний раз редактировалось SQLHACK; 25.04.2009 в 13:38..
 
Ответить с цитированием

  #5  
Старый 25.04.2009, 13:38
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


По умолчанию

2 PaCo:

$input="http://site.ru/script.php?id=1+%75%6E%69%6F%6E+%73%65%6C%65%63%74 +1";

реальный пример:

Код:
http://www.cz-usa.com/product_detail.php?id=-7+%75%6E%69%6F%6E+%73%65%6C%65%63%74+1,2,3,4,version(),6/*
усовершенствуй код, и я его опять обойду, но уже за деньги
 
Ответить с цитированием

  #6  
Старый 25.04.2009, 13:48
PaCo
Постоянный
Регистрация: 06.02.2008
Сообщений: 494
Провел на форуме:
1754802

Репутация: 380
По умолчанию

Цитата:
Сообщение от Pashkela  
2 PaCo:

$input="http://site.ru/script.php?id=1+%75%6E%69%6F%6E+%73%65%6C%65%63%74 +1";

реальный пример:

Код:
http://www.cz-usa.com/product_detail.php?id=-7+%75%6E%69%6F%6E+%73%65%6C%65%63%74+1,2,3,4,version(),6/*
усовершенствуй код, и я его опять обойду, но уже за деньги
Не хочу тебя растраивать но данные пришедшие из вне уже будут будут преобразованны в нормальный вид(попробуй зделать echo $_GET['id']) ), и если не делать повторного преобразования в коде то это НИЧЕГО НЕ ДАСТ, Byrger спросил как зделать так и так и я ответил, конечно же самый разумный вариант это проверка данный на соответсвия их типу прежде чем вставлять их в гвери.
 
Ответить с цитированием

  #7  
Старый 25.04.2009, 13:54
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

Репутация: 275
По умолчанию

Почему бы не использовать prepared statement'ы, как это делают во всех других языках? Они и выполняются быстрее и необходимость в какой-либо изощренной фильтрации отпадает.
 
Ответить с цитированием

  #8  
Старый 25.04.2009, 14:31
SQLHACK
Голос разума
Регистрация: 27.09.2006
Сообщений: 529
Провел на форуме:
1607210

Репутация: 1617


По умолчанию

Цитата:
Сообщение от Forcer  
Почему бы не использовать prepared statement'ы, как это делают во всех других языках? Они и выполняются быстрее и необходимость в какой-либо изощренной фильтрации отпадает.
Блин все уже давно написано, я вон функцию скинул простую и 100% надежную , Chaak собсввенно тоже самое написал но по другом, в конце концов посмотрите вы например как в WordPress сделано. \
Че вы в тысячный раз велосипед изобретаете.
__________________
Бойтесь своих желаний. Они могут исполниться....

...О-о-о-о, ушами не услышать, глазами не понять!
 
Ответить с цитированием

  #9  
Старый 25.04.2009, 14:44
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

Репутация: 275
По умолчанию

SQLHACK
В том то и дело, что велосипед - это ваши функции. А prepared statement'ы это проверненное и повсеместно используемое решение. Я мало знаком с php, поэтому врядли вам могу что-нибудь советовать. Но тем не менее в других языках не пишут какие то свои функции, а используют prepared statement'ы. Я не агитирую вас, просто задался вопросом зачем что-то свое писать, если есть готовое на уровне языка причем?
 
Ответить с цитированием

  #10  
Старый 25.04.2009, 15:20
Byrger
Постоянный
Регистрация: 07.03.2008
Сообщений: 479
Провел на форуме:
791766

Репутация: 61
По умолчанию

Хорошо со SQL-inj разобрались... а как защититься от заливки шеллов?

Так вышледит скрипт заливающий файлы у меня...
PHP код:
   $uploaddir '../images/works/minipic/';
    
$uploadfile $uploaddir.basename($_FILES['minipic']['name']);
    if (
copy($_FILES['minipic']['tmp_name'], $uploadfile)){
                
    }else { echo 
"<h3>Ошибка! Не удалось загрузить файл на сервер!</h3>"; exit; } 
Как видите никак не экранируется...
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.