
25.04.2009, 13:30
|
|
Голос разума
Регистрация: 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..
|
|
|

25.04.2009, 13:35
|
|
Постоянный
Регистрация: 07.03.2008
Сообщений: 479
Провел на форуме: 791766
Репутация:
61
|
|
Оо нифига на 2 страницы растянули : )
Спасибо всем.
А как достать строку из браузера которую пользователь вводит?
Последний раз редактировалось Byrger; 25.04.2009 в 13:42..
|
|
|

25.04.2009, 13:39
|
|
Познавший АНТИЧАТ
Регистрация: 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..
|
|
|

25.04.2009, 13:35
|
|
Голос разума
Регистрация: 27.09.2006
Сообщений: 529
Провел на форуме: 1607210
Репутация:
1617
|
|
имел ввиду функцию mailbrush'a
2 PaCo:
А твой пример с тратата тупо будет заплевывать как как Юзера ошибками, так и БД левыми не рабочими запросами
Действительно куда тебе до меня супер умного ))))
__________________
Бойтесь своих желаний. Они могут исполниться....
...О-о-о-о, ушами не услышать, глазами не понять!
Последний раз редактировалось SQLHACK; 25.04.2009 в 13:38..
|
|
|

25.04.2009, 13:38
|
|
Динозавр
Регистрация: 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/*
усовершенствуй код, и я его опять обойду, но уже за деньги 
|
|
|

25.04.2009, 13:48
|
|
Постоянный
Регистрация: 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 спросил как зделать так и так и я ответил, конечно же самый разумный вариант это проверка данный на соответсвия их типу прежде чем вставлять их в гвери.
|
|
|

25.04.2009, 13:54
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
Почему бы не использовать prepared statement'ы, как это делают во всех других языках? Они и выполняются быстрее и необходимость в какой-либо изощренной фильтрации отпадает.
|
|
|

25.04.2009, 14:31
|
|
Голос разума
Регистрация: 27.09.2006
Сообщений: 529
Провел на форуме: 1607210
Репутация:
1617
|
|
Сообщение от Forcer
Почему бы не использовать prepared statement'ы, как это делают во всех других языках? Они и выполняются быстрее и необходимость в какой-либо изощренной фильтрации отпадает.
Блин все уже давно написано, я вон функцию скинул простую и 100% надежную , Chaak собсввенно тоже самое написал но по другом, в конце концов посмотрите вы например как в WordPress сделано. \
Че вы в тысячный раз велосипед изобретаете.
__________________
Бойтесь своих желаний. Они могут исполниться....
...О-о-о-о, ушами не услышать, глазами не понять!
|
|
|

25.04.2009, 14:44
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
SQLHACK
В том то и дело, что велосипед - это ваши функции. А prepared statement'ы это проверненное и повсеместно используемое решение. Я мало знаком с php, поэтому врядли вам могу что-нибудь советовать. Но тем не менее в других языках не пишут какие то свои функции, а используют prepared statement'ы. Я не агитирую вас, просто задался вопросом зачем что-то свое писать, если есть готовое на уровне языка причем?
|
|
|

25.04.2009, 15:20
|
|
Постоянный
Регистрация: 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; }
Как видите никак не экранируется...
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|