Flask API для предоставления файлов JSON в простом веб-приложении HTML + JS + CSS при сохранении его безопасности - PullRequest
8 голосов
/ 24 октября 2019

Я сделал простое веб-приложение, которое будет показывать некоторые данные в таблице, которая будет обновляться еженедельно.

Это обновление выполняется в бэкэнде с использованием некоторого кода Python, который очищает и изменяет некоторые данные, прежде чем поместить их в базу данных SQLite.

После некоторого чтения я узнал, что для доставки этих данных в мое веб-приложение я должен создать API с Flask, который может взять эти данные и доставить их в JS в моем веб-приложении в виде JSON, который затем можетиспользуйте данные для заполнения таблицы. Однако я должен защитить свой API с помощью имени пользователя и pw. Но так как это интерфейс JS, который будет извлекать данные из API, в действительности нет никакого смысла, так как имя пользователя и pw должны быть жестко закодированы в JS, который затем может быть прочитан пользователями. (Я думаю)

Должен ли я предоставлять свой API всем, или это не тот способ использовать данные SQLite в качестве бэкэнда для моего веб-приложения? Я прекрасно держу API только для GET.

Ответы [ 3 ]

2 голосов
/ 05 ноября 2019

Вы правы, бессмысленно защищать свой API. Защита API необходима только при определенных обстоятельствах.

Если вы обращаетесь к данным, которые вы не хотите, чтобы кто-либо видел, возможно, с помощью внутреннего вызова, то имеет смысл добавить некоторую форму безопасности (обычно это ключ API или токены авторизации в заголовках ваших запросов).

Однако, если вы делаете вызовы с вашего внешнего интерфейса (т. е. на стороне клиента) к внутреннему API, то нет смысла ставить там дополнительную защитутак как пользователь уже может видеть запрос и уже имеет доступ к данным, возвращаемым API-интерфейсом, поэтому, гарантируя его, вы ничего не добьетесь.

Обычно, если страница, которую посещает пользователь, содержит конфиденциальные данные, которые вы предоставляете. Если вы не хотите, чтобы все это видели, вы бы вместо этого предприняли меры для защиты своего сайта (например, защитив его с помощью логина для имени пользователя и пароля, прежде чем вы сможете получить доступ к этой странице). Если вы выбрали этот подход, когда веб-сайт защищен именем пользователя и паролем, вы можете обновить API, чтобы убедиться, что он не отвечает на запросы, когда пользователь не аутентифицирован (например, путем создания токена сеанса или чего-то уникального длякаждый вошел в систему).

Если вы посмотрите на веб-сайты, на которых доступно много бесплатных данных, вы обнаружите, что все они имеют вызовы API переднего плана, которые абсолютно незащищены (потому что это бессмысленно, если данныеуже свободен для доступа). Некоторые веб-сайты предпринимают шаги, чтобы удостовериться, что это их собственный веб-сайт, который вызывает API, но даже в этом случае это немного бессмысленно, поскольку веб-сборщики всегда могут извлечь данные из HTML.

1 голос
/ 30 октября 2019

Взгляните на эту страницу , которая описывает заголовки аутентификации. Этот более простой путь заключается в жестком кодировании информации заголовка во Flask, чтобы сделать ее немного более безопасной. Вы также можете попробовать более сложный способ чтения информации заголовка из вашей базы данных. То, что в настоящее время работает для меня, чтобы читать из postgres db, ниже, так что вы можете немного изменить его для sqlite.

def valid():
  headers = request.headers
  auth = headers.get("X-Api-Key")
  user = User.query.filter_by(apikey=auth).first_or_404()
  print('from search of db ',user,'',auth)
  return str(user)
0 голосов
/ 30 октября 2019
  1. Как вы упомянули, вы планируете показывать общедоступные данные - тогда их можно использовать даже без аутентификации. В противном случае, я думаю, что это может занять слишком много ненужного времени.
  2. Поскольку у вас есть простая и простая таблица из базы данных, я считаю, что вам не нужен API. Вы можете просто создать шаблон HTML и отобразить его с данными. Некоторые примеры можно найти здесь и , немного больше здесь .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...