2013-05-18 2 views
0

Я разрабатываю проект для своего колледжа.Как сделать мой проект PHP более безопасным?

Проект одобрен моим колледжем и будет жить на следующей неделе для более 5000 студентов, и проект работает нормально, но я беспокоюсь о хаках и вторжениях, которые могут выполнять студенты.

Проект представляет собой портал для публикации уведомлений и проект повышения квалификации, в котором руководство колледжа публикует новости, а студенты могут просматривать его после проверки по электронной почте. Студенты могут загружать свои достижения, чтобы делиться с колледжем, делиться своими творческими работами, такими как приложения, веб-сервисы и т. Д. Они также могут просматривать навыки других студентов, чей профиль заполнен, что поможет в создании групп.

Я подал заявку ниже ценных бумаг:

  • Я использовал if(isset($_SESSION['name']) && isset($_SESSION['email']) && isset($_SESSION['pass'])) на каждой странице, чтобы предотвратить не LoggedIn пользователей.

  • mysql_real_escape_string($pass); // для экранирования специальных символов.

  • Пароли зашифрованы с использованием метода соли (Crypt();).

  • Проверки при регистрации & Ограничения на загрузку файлов.

Я искал и применил вышеуказанные ценные бумаги, но хочу знать, что другие вещи, которые необходимы в этом типе проекта, возможно, некоторые дополнения в .htaccess?

+0

Я думаю, что не осталось для вашего проекта на этом уровне .... Все лучший, надеюсь, что ваш проект проделан хорошо – Gautam3164

+2

шифрует каждый идентификатор со значением соли для всех ваших операций с правами, таких как добавление, редактирование, удаление, просмотр и для вызовов ajax, которые скрыты, но их можно увидеть в консоли и в вашем первичном ключе базы данных (ids) можно было легко увидеть. –

+0

@ Gautam3164: Я показал здесь, чтобы вы могли заглянуть в портал. Любые советы или идеи для проекта? – user2216267

ответ

2

Там нет никаких оснований для сохранения пароля (или хэш пароля, если это то, что вы делаете) в сессия. Пароли секрет. Вы должны быть очень осторожны в том, как вы справляетесь с чужими секретами.

Сохранение уникального имени (или по электронной почте) достаточно, чтобы определить, что пользователь вошел в

Некоторые другие проблемы, я заметил:.

  • Пароль поле в верхней форме входа в систему не «пароль " тип. Позволяет заниматься серфингом.
  • Нет необходимости использовать mysql_real_escape_string(), если у вас есть пароль. Хеширование пароля должно быть первым, что вы делаете после его получения.
  • На странице учетной записи вы использовали поле типа «пароль» для Ответ на вызов безопасности, но вы предварительно заполнили поле значением. Это доступно в источнике HTML. Ваш номер 12345.
  • У вас все еще есть display_errors значение true в вашем php.ini.
  • Нет SSL. Все пароли будут отправлены незашифрованными в вашей сети колледжа.
  • Ваш вопрос не упоминается bcrypt, но он должен. BCrypt является подходящим алгоритмом хеширования паролей. (PHP вызывает этот CRYPT_BLOWFISH).
  • Использование mysql_real_escape_string() указывает, что вы не используете подготовленные операторы и параметры привязки. Это делает невозможным SQL-инъекцию. Переключитесь на mysqli или PDO.

Я не пытаюсь выполнить какие-либо необычные POST-запросы к вашей службе, но я заметил, что у вас есть куча полей, которые в редакторе отключены. На самом деле это ничего не мешает. Я могу отправить эту форму с другим идентификатором студента. Получает ли PHP-получатель этот случай?

+0

благодарим вас за полезную обратную связь :) .... Поле «Пароль» в верхней форме входа изменяется на «Тип пароля» при нажатии на JavaScript. ... да, я обработал его на стороне php, поскольку я не передал отключенные поля в запрос SQL Update .... как вы сделали это в файле php.ini? больше предложений для проекта? – user2216267

+0

Я использую NoScript для обработки javascript, но я знаю, что это необычный выбор. Я не видел ваш php.ini. Я видел ошибку подключения к базе данных, отображаемую в браузере. :-) – Ladadadada

+0

okk :) спасибо:) .... была ли ошибка подключения к базе данных какой-либо взлом? больше изменений я должен делать? – user2216267

1

Попробуйте один к параметрам URL-адрес для шифрования и Decription

$salt ='The key you can use anything'; 

Шифрование:

function simple_encrypt($text) 
{ 
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))); 
} 

Decription:

function simple_decrypt($text) 
{ 
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
} 

Здесь $ текст вашего PARAMET ERS, которые вы хотите, чтобы пройти через URL

Надеется, что это поможет для вас

+0

спасибо .... так что я должен использовать шифрование непосредственно перед эхом ""; Это ? и расшифровать его при его получении?(главным образом, чтобы не подвергать мой первичный ключ)? – user2216267

+0

, в то время как вы даете ссылку на запись редактирования или удаления, вы перенаправляетесь на другую страницу справа .. в это время передают зашифрованные идентификаторы и параметры на эту страницу и при этом расшифровывают значение get и предпринимают действия с этим. Благодаря этому вы можете защитить параметры, и вы можете сделать то же самое действие, что и исходное значение ;-) – Gautam3164

3

Некоторых небольшие улучшений могут быть сделано:

1) Вы должны хранить только одну сессии, в которой вы поставили бы пользователь id после того, как они вошли в систему.

2) Не используйте mysql больше. Используйте PDO - это драйвер, который позволяет вам использовать параметризованные запросы для предотвращения внедрения sql.

3) Для безопасного хранения паролей используют Bcrypt здесь хороший ответ о том, как использовать его: Link

+0

спасибо:) .... Я использовал 3 значения сеанса, потому что я думал, что кто-то, использующий некоторые инструменты сеанса (возможно), может быть установленным? есть ли такой инструмент? и функция кеппа не так безопасна? – user2216267

2

Самый простой способ испортить это инъекции SQL (если вы используете базу данных) - есть даже ботам там пытаются вставить код на веб-страницу, хотя SQL инъекций и доставки вредоносного кода

Я хотел бы обеспечить все SQL (независимо от того, что это INSERT/SELECT/UPDATE/DELETE), если есть пользовательские параметры ввода. Для строк вы уже обработали его хорошо (но читайте http://php.net/manual/en/function.mysql-real-escape-string.php для предупреждения о кодировке), для целого числа я использовал бы вход (int).

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

И думать о том, как вы отображения данных, вводимых пользователем, люди могут представить HTML-коды с <scripts>, лучше придавить их с htmlspecialchars()

+0

спасибо, было полезно:) .... ok плохо защищать каждый оператор SQL:) .... больше предложений для проекта? – user2216267

+0

Добро пожаловать! Я думаю, что другие уже сделали очень хорошие моменты :), вот и все, что я могу предложить. –

Смежные вопросы