Реализована капча в flaskshop/captcha/forms.py
, в flaskshop/templates/captcha
хранится jijna шаблон отображения страницы с капчей.
Для создания изображений была добавлена библиотека PIL.
Капча использует email адрес в качестве персональных данных: генерируется 8 изображений, на каждом из которых содержится несколько последовательных символов из email адреса.
- Изображения не сохраняются, а сразу переводятся в base64 (это избавляет от проблем с наименованием этих изображений и их последующем удалении после GET запроса).
- Изображения перетасовываются, после чего соответствующие изображениям части email адреса добавляются последовательно в Redis базу данных с разделителем (её использование позволяет в том числе убирать "брошенные" пользователями капчи из БД по истечении времени).
- Клиент получает base64-изображения в перетасованном порядке.
- Ответом клиента является перестановка чисел от 0 до 7 (включительно, числа разделены пробелом). Самих чисел пользователь, естественно, не видит, этим занимается код на стороне клиента.
- Сервер, используя числа клиента и соответствие индекс-текст (из второго пункта), сравнивает полученный email адрес с реальным.
Решение об отправке капчи принимает captcha_required
, определённая в flaskshop/captcha/views.py
. В текущей реализации капча будет показана, если у пользователя значение флага bot – True. Если на некой странице есть необходимость капчи, то её следует использовать captcha_requeired
как декоратор (по аналогии с login_required
):
@login_required
@captcha_required
def test_pay(token):
payment = create_payment(token, "testpay")
payment.pay_success(paid_at=datetime.now())
return redirect(url_for("order.payment_success"))
Далее ридми о "поднятии" сайте от разработчиков (docker-compose up
).
This project is a front page copy of saleor old version, but written with flask. It hasn't completed yet.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
First, Clone and Install dependence
git clone https://github.com/hjlarry/flask-shop.git
cd flask-shop
python3 -m venv .venv
# on windows, you should run .venv\Scripts\activate.bat
source .venv/bin/activate
pip3 install -r requirements.txt
Second, Init db and run
# modify .flaskenv and flaskshop/setting.py
flask createdb
flask seed
flask run
First, Build image and run in background
docker-compose up -d
Second, enter container and add fake data
docker-compose exec web sh
flask createdb
flask seed
The default admin account is:
username | password | role |
---|---|---|
admin | admin | super administrator |
editor | editor | editor |
op | op | operator |
If the js files has been modified, you need to:
npm install
npm run build
Redis and Elasticsearch is unabled by default, You can enable them for good performence and search ablitity.
Анализ капчи производится в папке catpcha_analysis
. Ввиду некоторой разрозненности исследования утилиты анализа оказались немного разбросанными. Все скрипты являются скорее демонстрацией практической осуществимости атаки на капчу, чем законченным ПО. Запуск всех .py
файлов:
python3 filename.py
captcha_generate.py
-- скрипт для генерации базы изображений (внутри настраиваемые параметры).- NN -- папка с двумя jupyter-notebook (для обучения и тестирования) вместе с моделью.
method_*
-- реализация соответствующего метода. Для brutesearching есть реализация на golang (работает быстрее, параллельно).
Для работы метода teseract требуется установить teseract, удостоверится, что он есть в $PATH
, а также данные для его работы (подходит eng.trainddata
).
emails_faker.py
-- генерация базы email с помощью библиотекиfaker
(псевдореальные адреса).emails_gen.py
- генерация на основе популярных имен/доменов (предпочтительный метод).main.py
иmain.go
(реализуют одно и то же, реализация на golang быстрее) решают текстовый пазл с помощью расстояния Левенштейна (используются соответствующие библиотеки). В поле INPUT вводится распознанный из предыдущего модуляimg2text/NN/model_test.ipynb
текст капчи.