Исходник 🎈 Лучшая копия сайта Excellent, Frontend + Backend

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
в теории "КАК ЖЕ ПОДКЛЮЧИТЬ ДАТАБАЗУ" - нет
ты прав, я сделал глупую ошибку в сообщение
и вообще я имел веду "Как запустить локальный сервер с база данными"
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Это самое тяжелое, что я делал.

При скачивание вы получите:
1. Функциональный backend
2. Красивый фронтенд
3.User панель
4. И многое другое

download
Пожалуйста, авторизуйтесь для просмотра ссылки.


SS:
Посмотреть вложение 305518

Посмотреть вложение 305519
Посмотреть вложение 305520
КАК ЗАПУСТИТЬ ДАТАБАЗУ?

1. Скачайте XAMP (noad) (
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
2. После скачивание, переходите по этой директории - C:\xampp\htdocs и с помощью метода ctrl+a / ctrl+c / ctrl+v перекидываете сайт в эту папку
Посмотреть вложение 305516

3. После этого вы переходите в config справа там включаете то что на скриншоте

Посмотреть вложение 305517

4. Сохраняете это все дело, и заходите в конфигурацию в Apache которая чуть правее от apache и открываете php.ini в этом php.ini ищите строку с

  1. ;extension=sqlite3
    Убираете точку с запятой то-есть эту ; после этого сохраняете файл.

    5. После чего вы перезапускаете Apache, и запускаете sqlite (MYSQL)
Если у вас есть какие-то проблемы, то пишите мне в тг @yes_vilovsky
 
1) SQLite: мне кажется, не очень подходит под прод, как минимум из-за однопоточности и блокировок. Больше двух человек на сайте и один из них либо ждёт пока база освободится (если настроено), либо получает BUSY_TIMEOUT и ошибку, при небольшой нагрузке такого конечно не будет, но потом придётся переходить.
2) Расширение SQLite в PHP: мне кажется стоит рассмотреть PDO, чтобы потом не пришлось переписывать всё под MySQL/PostgreSQL при переезде, в PDO просто драйвер меняется, а дамп и запросы можно просто адаптировать.
3) Хорошо, что используются подготовленные запросы, но не увидел защиты от XSS, она тут есть? (как и проверок на размер строк от пользователя)
4) Не во всех функциях есть проверки на успешность вставки (createAuthToken, например), если вставить строку в базу не выйдет, а пользователю скажет, что он зашёл, получится прикол.

Главный вопрос, почему используется localStorage и токен хранится там, а не в куках или сессии с httpOnly?
Ещё, передавать "success" в json необязательно, можно использовать HTTP-статусы (200, 401, 403 и тд)

Вообще можно было JS на >50% выпилить и сделать всё проще. Например, зачем нужен checkAuthStatus? Можно сделать index.php, туда закинуть сразу проверку токена + сделать токен в куки (он будет передаваться теперь автоматически браузером, без отправки через Fetch) и оттуда редиректить куда надо: header("Location: auth.php"), если токен невалидный и отрисовка страницы, если с ним всё ок.
Logout делается теперь так же просто, переходим по ссылке (<a href="logout.php">), удаляем там куки, токен из базы и редиректим на index, всё.

Фронт особо не смотрел (как и вообще проект, напиши если что не так сказал), выглядит вроде неплохо, правда в некоторых местах немного кривовато (tab-indicator и карусель-слайдер)

и запускаете sqlite (MYSQL)
Не понял.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1) SQLite: мне кажется, не очень подходит под прод, как минимум из-за однопоточности и блокировок. Больше двух человек на сайте и один из них либо ждёт пока база освободится (если настроено), либо получает BUSY_TIMEOUT и ошибку, при небольшой нагрузке такого конечно не будет, но потом придётся переходить.
2) Расширение SQLite в PHP: мне кажется стоит рассмотреть PDO, чтобы потом не пришлось переписывать всё под MySQL/PostgreSQL при переезде, в PDO просто драйвер меняется, а дамп и запросы можно просто адаптировать.
3) Хорошо, что используются подготовленные запросы, но не увидел защиты от XSS, она тут есть? (как и проверок на размер строк от пользователя)
4) Не во всех функциях есть проверки на успешность вставки (createAuthToken, например), если вставить строку в базу не выйдет, а пользователю скажет, что он зашёл, получится прикол.

Главный вопрос, почему используется localStorage и токен хранится там, а не в куках или сессии с httpOnly?
Ещё, передавать "success" в json необязательно, можно использовать HTTP-статусы (200, 401, 403 и тд)

Вообще можно было JS на >50% выпилить и сделать всё проще. Например, зачем нужен checkAuthStatus? Можно сделать index.php, туда закинуть сразу проверку токена + сделать токен в куки (он будет передаваться теперь автоматически браузером, без отправки через Fetch) и оттуда редиректить куда надо: header("Location: auth.php"), если токен невалидный и отрисовка страницы, если с ним всё ок.
Logout делается теперь так же просто, переходим по ссылке (<a href="logout.php">), удаляем там куки, токен из базы и редиректим на index, всё.

Фронт особо не смотрел (как и вообще проект, напиши если что не так сказал), выглядит вроде неплохо, правда в некоторых местах немного кривовато (tab-indicator и карусель-слайдер)


Не понял.
Благодарю, сегодня выпущу вторую версию. Уже работаю, над этим!
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1) SQLite: мне кажется, не очень подходит под прод, как минимум из-за однопоточности и блокировок. Больше двух человек на сайте и один из них либо ждёт пока база освободится (если настроено), либо получает BUSY_TIMEOUT и ошибку, при небольшой нагрузке такого конечно не будет, но потом придётся переходить.
2) Расширение SQLite в PHP: мне кажется стоит рассмотреть PDO, чтобы потом не пришлось переписывать всё под MySQL/PostgreSQL при переезде, в PDO просто драйвер меняется, а дамп и запросы можно просто адаптировать.
3) Хорошо, что используются подготовленные запросы, но не увидел защиты от XSS, она тут есть? (как и проверок на размер строк от пользователя)
4) Не во всех функциях есть проверки на успешность вставки (createAuthToken, например), если вставить строку в базу не выйдет, а пользователю скажет, что он зашёл, получится прикол.

Главный вопрос, почему используется localStorage и токен хранится там, а не в куках или сессии с httpOnly?
Ещё, передавать "success" в json необязательно, можно использовать HTTP-статусы (200, 401, 403 и тд)

Вообще можно было JS на >50% выпилить и сделать всё проще. Например, зачем нужен checkAuthStatus? Можно сделать index.php, туда закинуть сразу проверку токена + сделать токен в куки (он будет передаваться теперь автоматически браузером, без отправки через Fetch) и оттуда редиректить куда надо: header("Location: auth.php"), если токен невалидный и отрисовка страницы, если с ним всё ок.
Logout делается теперь так же просто, переходим по ссылке (<a href="logout.php">), удаляем там куки, токен из базы и редиректим на index, всё.

Фронт особо не смотрел (как и вообще проект, напиши если что не так сказал), выглядит вроде неплохо, правда в некоторых местах немного кривовато (tab-indicator и карусель-слайдер)


Не понял.
Можешь написать мне в тг пожалуйста, пару вопрос уточнить @yes_vilovsky
 
какашка
 
херня, переделывай
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
з= \
Фронтенд хороший, бекенд я писал буквально на палках.

Друзья, вот вам маленький гайдик как защитить себе бекенд часть на моей копии!

Защита, от XSS

JavaScript:
Expand Collapse Copy
function escapeHTML(text) {
    return text.replace(/&/g, "&amp;")
               .replace(/</g, "&lt;")
               .replace(/>/g, "&gt;")
               .replace(/"/g, "&quot;")
               .replace(/'/g, "&#039;");
}


2.


Код:
Expand Collapse Copy
</script>
    
    <script>
      document.addEventListener('DOMContentLoaded', function() {
        document.body.addEventListener('copy', function(e) {
          e.preventDefault();
        });
        
        document.body.addEventListener('dragstart', function(e) {
          e.preventDefault();
        });
        
        const checkScriptInjection = function() {
          const suspiciousNames = ['jszip', 'clone', 'download', 'scrape', 'crawler'];
          for (const name of suspiciousNames) {
            if (window[name] || document.querySelector(`script[src*="${name}"]`)) {
              console.error('Подозрительный скрипт обнаружен');
              return true;
            }
          }
          return false;
        };
        
        setInterval(checkScriptInjection, 1000);
      });
    </script>
</body>
</html>


Вот и все.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Хоть оставляйте мнение своё я сижу жду...
 
Круто, спасибо
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
900 просмотров на теме я в шоке
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Впервые под моим постом 1к просмотров!
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1600 просмотров я в ахуе..
 
Назад
Сверху Снизу