Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Мой первый сайт на PHP (https://javascript.ru/forum/project/69102-mojj-pervyjj-sajjt-na-php.html)

DivMan 29.05.2017 22:02

Мой первый сайт на PHP
 
Оцените, мой небольшой сервис вопросов и ответов, всё делал сам, на чистом html, css, js и php.

Очень интересно узнать, удобно ли я сделал админку?

Для входа в админку, надо указать GET параметр ?admin=1 и ввести admin и admin

только не удаляйте разделы, которые вы не создавали.

http://phpkurs.16mb.com/?admin=1

сам сайт http://phpkurs.16mb.com/

весь код на гитхабе https://github.com/Div-Man/faq в коде получилось, очень много дублирования.

Описание клиентской части
  • Пользователи могут просматривать категории, вопросы и ответы.
  • Любой пользователь может задать вопрос, указав своё имя, адрес электронной почты, выбрав категорию и написав текст вопроса.
  • Вопросы без ответов не публикуются на сайте.

Вход в интерфейс администратора
  • Для попадания в интерфейс администратора нужно ввести логин и пароль.
  • По умолчанию создан единственный администратор с логином admin и паролем admin.

Возможности в интерфейсе администратора
  • Просматривать список администраторов.
  • Создавать новых администраторов.
  • Изменять пароли существующих администраторов.
  • Удалять существующих администраторов.
  • Просматривать список тем. По каждой теме в списке видно сколько всего вопросов в ней, сколько опубликовано, сколько без ответов.
  • Создавать новые темы.
  • Удалять существующие темы и все вопросы в них.
  • Просматривать вопросы в каждой теме. По каждому вопросу видно дату создания, статус (ожидает ответа / опубликован / скрыт).
  • Удалять любой вопрос из темы.
  • Скрывать опубликованные вопросы.
  • Публиковать скрытые вопросы.
  • Редактировать автора, текст вопроса и текст ответа.
  • Перемещать вопрос из одной темы в другую.
  • Добавлять ответ на вопрос с публикацией на сайте, либо со скрытием вопроса.
  • Видеть список всех вопросов без ответа во всех темах в порядке их добавления. И иметь возможность их редактировать и удалять.

laimas 31.05.2017 03:06

100% дырявый код.

DivMan 02.06.2017 11:14

А можно поподробней?

laimas 02.06.2017 11:44

Нет, подробный аудит ваших скриптов, это много. Напрягите Гугл, есть инструменты для проверки уязвимости сайта. Но они не дадут полной картины, но есть масса статей в сети по данному вопросу.

Сразу что бросается в глаза, так это отсутствие фильтрации данных. Для справки - strip_tags, это не фильтрация, а htmlspecialchars к данным параметров запроса, это глупость, htmlspecialchars полезна для предотвращения XSS. И этот бедлам бесполезный не смотря на то, что используется PDO, но без использования его возможностей пресечения инъекций.

Нефильтрованные данные и в подстановках используются header('Location: ?interface-admin=1&showQuestion='. $_GET['showQuestion']);

psiklop 03.06.2017 02:49

Laimas наверное имел ввиду, что надо к strip_tags, еще добавить addslashes
Однажды читал про иньекции, но так и не понял как они возможны, например я пишу в базу через mysqli_query, там нельзя сделать два запроса одной строкой, ну по крайней мере я такого не знаю, laimas если знаешь напиши как такое возможно

Что значит фильтровать данные, если кто-то захочет передать в $_GET['showQuestion'] что-то чего там быть не должно и будет переход, что с того?
P.S. Код не читал, сорри.

laimas 03.06.2017 03:43

Цитата:

Сообщение от psiklop
Laimas наверное имел ввиду, что надо к strip_tags, еще добавить addslashes

Зачем?

Цитата:

Сообщение от psiklop
Однажды читал про иньекции, но так и не понял как они возможны, например я пишу в базу через mysqli_query, там нельзя сделать два запроса одной строкой

http://php.net/manual/ru/security.da...-injection.php

Цитата:

Сообщение от psiklop
если кто-то захочет передать в $_GET['showQuestion'] что-то чего там быть не должно и будет переход, что с того?

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

Этот раздел нужно знать.

psiklop 03.06.2017 15:52

Цитата:

Сообщение от laimas
Зачем?

addslashes используют для строковых параметров для предотвращение sql-иньекций

Цитата:

Сообщение от laimas
http://php.net/manual/ru/security.da...-injection.php

вот я и спросил, я пишу в базу через mysqli_query, там нельзя совмещать запросы select с insert, select с select и так далее, я пробовал и не получалось

laimas 03.06.2017 16:00

Цитата:

Сообщение от psiklop
addslashes используют для строковых параметров для предотвращение sql-иньекций

Для этого используют соответствующие функции для каждого из расширений MySQL. А в случае mysqli и PDO можно использовать подготовленные запросы.

Цитата:

Сообщение от psiklop
там нельзя совмещать запросы select с insert, select с select

https://dev.mysql.com/doc/refman/5.7...rt-select.html

А что mysql, mysqli разницы нет.

DivMan 05.06.2017 06:30

Я забиндел всё

laimas 05.06.2017 11:46

Ну если считаете, что теперь все Ок (так ли это...), думайте над диалогом, которого у вас нет.


Часовой пояс GMT +3, время: 04:53.