На одном из форумов показал вот такой код:
$title = strip_tags($_POST['title']);
$title = htmlspecialchars($title);
$title = mysql_real_escape_string($title);
$data = mysql_query("UPDATE `theme` SET `Title`='$title' WHERE `Key`='$id'");
Меня раскритиковали, сказали код не безопасен и вообще это говно код, мол сейчас рулит PDO, Laravel. Мой код действительно не безопасен?
По поводу Laravel. У меня достаточно маленький проект и использовать в нем Laravel наверное не стоит. Я нашел
http://medoo.in/Он позволяет делать вот такие конструкции:
$data = $database->update("gallery", ["Title"=>$title],["Key"=>$id]);
Может кто-то работал с medoo.in, можете рассказать его плюсы и минусы.
Dima85Так пусть расскажут про уязвимость, что нам это задавать? Лично я дыры не вижу, если они увидели, то пусть покажут её

Правда ты показал обработку $title, а не показал обработку $id. Может быть ты её не обрабатываешь как надо?
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Dima85, не работал, но думаю не плохая абстракция, но твоём месте я бы сделал велосипед.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
inpost, дыра там есть
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Dima85Но тут есть другая проблема, ты не понимаешь что делаешь, поэтому и лепишь все функции подряд. Первая нужна тогда, когда убираешь теги, вторая - когда экранизируешь для ВЫВОДА спец.символы, а третья для запроса MySQL безопасного для строк и используется при занесении данных в БД.
cheeс $title после mysql_real_escape_string ? Расскажи подробнее
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
inpost, причем тут $title, там $id
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
cheeТы видишь в коде как была создана $id ?
Моя цитата:
"не показал обработку $id"
Отсюда, есть предположение, что ранее написано:
$id = mysql_real_escape_string($_GET['id']); , ведь он точно так же title создавал. Если там так и есть, то безопасно.
Я же сказал, что в $title уязвимости нет, а $id ТС не показал.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
$id обрабатывается точно так же как и $title
Меня отправили читать вот это:
http://phpfaq.ru/misc/sql_injection_dc2013.pdfЯ понимаю что
Цитата |
$title = strip_tags($_POST['title']); $title = htmlspecialchars($title); $title = mysql_real_escape_string($title); |
не обрабатывают: ' "
То есть не комментируют их, и это может вызвать дырку, или это не так?
И второй вопрос:
$data = $database->update("theme", ["Title"=>$title],["Key"=>$id]);
это
http://medoo.in/И стандарт:
$data = mysql_query("UPDATE `theme` SET `Title`='$title' WHERE `Key`='$id'");
Чем первый вариант лучше стандартного? В чем вообще преимущество database framework?
Invis1ble
5.04.2015 - 14:42
смешались в кучу кони, люди...
уязвимости с $title нет, есть говнокод
с $id непонятно, так как не видна инициализация и обработка
причем тут фреймворки вообще?
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
cheeВот видишь, точно так же, значит нет уязвимости.
Dima85FW тут ни при чём. Тебе бы стандартные вещи языка почитать, как работает та или иная функция, когда их применять и т.д.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Dima85Правильно про PDO говорят.
Это выгладило бы так.
$query = $db->prepare("UPDATE `theme` SET `title` = :title WHERE `key` = :id");
$query->execute(array(
':title' => htmlspecialchars($_POST['title']),
':id' => (int)$_POST['id']
));
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
В MySQLi в РНР 5.5 также есть функции prepare, bindParam и други плюшки ранее доступные только в PDO.
mysql_query - считается устаревшей.
по воводу кода:
$title = mysql_real_escape_string($title);
$id = mysql_real_escape_string($id);
$data = mysql_query("UPDATE `theme` SET `Title`='$title' WHERE `Key`='$id'");
Наверняка будет достаточно.
Цитата |
По поводу Laravel. У меня достаточно маленький проект и использовать в нем Laravel наверное не стоит. Я нашел http://medoo.in/ Он позволяет делать вот такие конструкции:
$data = $database->update("gallery", ["Title"=>$title],["Key"=>$id]); Может кто-то работал с medoo.in, можете рассказать его плюсы и минусы. |
Все фреймворки один сплошной минус! И Laravel и Medoo и все прочие.
_____________
Трус не играет в хокей
Цитата (inpost @ 5.04.2015 - 14:46) |
Вот видишь, точно так же, значит нет уязвимости. |
ну ок
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (stump @ 5.04.2015 - 15:35) |
$id = mysql_real_escape_string($id); |
Если речь об айдишнике, предпочитаю
$id = (int)$id;
_____________
Бесплатному сыру в дырки не заглядывают...
Игорь_Vasinsky
5.04.2015 - 20:27
полностью согласен
Цитата |
, мол сейчас рулит PDO, Laravel. |
не будь как все. иди своим путём
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.