Пишу сайт, где есть аккаунты (аж 2 типа), логин с паролем - естественно, ввод данных для отправки их админу, которые автоматически INSERT'ятся в MySQL. Вобщем, вводимых кем угодно данных хватает. Сайт достаточно важен и может представлять интерес для взлома. Если он получит хоть какую-нибудь заметную популярность - я ожидаю, что найдутся желающие проверить на нём как работают автоматические средства для ломания сайтов.
Данные хостинга надёжно защищены, так как пароли грамотно составлены и хранятся мною на машине с GNU/Linux в зашифрованном виде. Никаких краж паролей от FTP/MySQL и прочих быть не может. Так что тут, вроде, меры принял.
Все данные, которые только могут пойти в БД, проходят mysql_real_escape_string(), так что тут, вроде, тоже защита есть (от injection).
Какие ещё могут быть бреши в безопасности, над которыми следует хорошо поработать, прежде чем запускать сайт online?
Спустя 10 минут, 10 секунд (28.06.2012 - 13:38) vagrand написал(а):
Почитайте про XSS уязвимости
Спустя 6 минут, 7 секунд (28.06.2012 - 13:44) alex455 написал(а):
Я читал про них. Это когда, например, посетитель сайта посылает админу данные, которые должны отобразиться в админке as is, а в них вставленный кусок js, который отправляет текущие cookie взломщику. Правильно?
Спустя 14 секунд (28.06.2012 - 13:44) Zzepish написал(а):
угу, и просо делай так:htmlspecialchars($str) при выводе из базы
Спустя 18 минут, 47 секунд (28.06.2012 - 14:03) alex455 написал(а):
Zzepish,
А почему не htmlentities? Они же, вроде, полноценнее...
А почему не htmlentities? Они же, вроде, полноценнее...
Спустя 11 минут, 31 секунда (28.06.2012 - 14:14) alex455 написал(а):
Вобщем, спасибо за совет; теперь вводимые данные проходят такую проверку:
Может, нужно что-то ещё? :-)
function prep($var)
{
return htmlentities(mysql_real_escape_string(trim($var)), ENT_QUOTES, 'utf-8');
}
Может, нужно что-то ещё? :-)
Спустя 32 минуты, 22 секунды (28.06.2012 - 14:47) Zzepish написал(а):
alex455
не так!
В базу заноси только так
mysql_real_escape_string(trim($var)
а выводи через
htmlentities($str)
не так!
В базу заноси только так
mysql_real_escape_string(trim($var)
а выводи через
htmlentities($str)
Спустя 8 минут, 2 секунды (28.06.2012 - 14:55) alex455 написал(а):
Сейчас попробовал сценарий со своей функцией - всё отлично работает.
Zzepish, смысл твоего варианта понятен, но он добавляет сложности. Почему бы не внести в БД обработанное моей функцией, а выводить из БД потом уже as is? Так проще получается. Данные в БД лежат уже готовые для вывода в HTML и отдельно об этом заботиться не надо.
Zzepish, смысл твоего варианта понятен, но он добавляет сложности. Почему бы не внести в БД обработанное моей функцией, а выводить из БД потом уже as is? Так проще получается. Данные в БД лежат уже готовые для вывода в HTML и отдельно об этом заботиться не надо.
Спустя 14 минут, 49 секунд (28.06.2012 - 15:09) ApuktaChehov написал(а):
alex455 Предположим что я хочу себе вот такой ник: >!Красавчег!<
После обработки твоей функцией в БД мой ник запишется вот так:>!Красавчег!<. Как минимум мое имя будет неверно записано в БД.
В БД данные должны быть записаны так как их прислал юзер. Искажение информации - плохая идея.
После обработки твоей функцией в БД мой ник запишется вот так:>!Красавчег!<. Как минимум мое имя будет неверно записано в БД.
В БД данные должны быть записаны так как их прислал юзер. Искажение информации - плохая идея.
Спустя 1 месяц, 16 дней, 14 часов, 42 минуты, 41 секунда (15.08.2012 - 05:52) Slavok написал(а):
Еще не стоит забывать про CSRF-атаки. Очень популярны в интернете сейчас. Решение - добавлять уникальный токен к форме и проверять его после сабмита формы.
Спустя 3 минуты, 19 секунд (15.08.2012 - 05:55) Slavok написал(а):
Еще надо обезопасить сайт от PHP File Inclusion и запретить всякие опасные функции типа exec, eval. Через них работают хакерские shell-скрипты.