2016-01-29 3 views
0

У меня есть страница входа, которая отправляет запрос на скрипт Python для аутентификации пользователя. Если он не аутентифицирован, он перенаправляет вас на страницу входа. Если он перенаправляет вас в HTML-форму. Проблема в том, что вы можете получить доступ к форме HTML, написав URL-адрес. Как я могу убедиться, что пользователь пришел из формы входа с моим скриптом Python без использования модулей, потому что я не могу ничего установить на своем сервере. Я хочу, чтобы это было строго с Python. Я не могу использовать PHP. Является ли это возможным? Могу ли я использовать другие методы для выполнения задачи?Как запретить пользователю напрямую обращаться к моей странице html

+2

Является ли ваш backend написанным на Python? Как он обслуживает файлы? Поскольку, если вы можете перехватить службу, вы можете выполнить проверку, если пользователь аутентифицирован (многие, многие способы сделать это), а затем выполнить перенаправление. –

+0

Это фундаментальная проблема безопасности. Независимо от того, какую структуру вы используете для создания страниц, необходимо проверить, что пользователь вошел в систему (через защищенный токен), прежде чем возвращать каждую защищенную страницу. Для этого требуется, чтобы весь сеанс был зашифрован (HTTPS), чтобы избежать захвата запросов и их повторного воспроизведения. К сожалению, объяснение того, как это сделать, является слишком широкой темой для ответа StackOverflow. Исследование «Управление сеансами» в Интернете. –

+0

Я запускаю свой скрипт Python на сервере linux, где он проверяет, находится ли пользователь в базе данных.В настоящее время у меня есть это, если он аутентифицирован, он печатает форму html, и я хочу, чтобы она перенаправляла вас, а не просто печатала всю форму. –

ответ

1

Для меня очевидно, что вы хотите использовать Python, без фреймворков и т. Д. Поэтому проблема в том, что вы фактически перенаправляетесь на существующую веб-страницу HTML. Не делайте этого, вместо этого используйте HTML с самим Python.

# pages.py 
class DefaultPage(object): 
    def __init__(self): 
     self.html = ''' 
     All Your HTML Here 
     ''' 
    def self.display: 
     return self.html 

Очевидно вы используете что-то, чтобы служить вашей Python, я что-то простое, как Google App Engine Launcher, в этом случае вы можете просто написать класс, предполагая. Даже если вы используете какой-либо другой простой WSGI, концепция остается прежней.

# main.py 
import webapp2 
from pages import DefaultPage 
class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     page = DefaultPage() 
     self.response.write(page.display()) 

app = webapp2.WSGIApplication([ 
    ('/', MainHandler) 
], debug=True) 
-2

Обязательно проверьте заголовок «referer» на Python и убедитесь, что адрес является вашей страницей входа.

+1

Это легко подделать. –

+0

Кто-то, кто знает, что они делают, конечно. –

+0

Безопасность от неизвестности - это не безопасность. Если это может быть фальсифицировано, и цель имеет какую-либо ценность, она будет подделана. –

0

Лучший способ обработки пользовательского входа - использовать маркеры как куки.
После успешного входа пользователя создайте токен и отправьте его им, сохраните этот токен в своей «в памяти» DB (если вы используете что-то вроде сервера django) - https://docs.djangoproject.com/en/1.9/intro/tutorial01/, он делает это за вас.
Каждый раз, когда пользователь получает доступ к любой внутренней странице вашего веб-сайта, проверьте токен пользователя, который был отправлен как заголовок файла cookie, если он находится в вашей БД, направьте его на запрошенную страницу, иначе перенаправьте его на страницу входа.
Я могу вам помочь, если вы дадите более подробную информацию о своем сервере (тип сервера)

+0

Я запускаю свой сценарий Python на сервере linux, где он проверяет, находится ли пользователь в базе данных. В настоящее время у меня есть это, если он аутентифицирован, он печатает форму html, и я хочу, чтобы она перенаправляла вас, а не просто печатала всю форму. –

+0

У вас есть контроль над перенаправлением пользователя? как насчет перенаправления пользователя на страницу входа, если он не является БД? –

+0

Я использую javascript, чтобы перенаправить вас на страницу входа в систему, если он не прошел аутентификацию. –

0

То, что вы только что попросили, называется Session Management. Вот руководство OWASP на нем: https://www.owasp.org/index.php/Session_Management

Вы можете использовать фреймворки, такие как Django, написанные на python, которые уже предоставляют этот уровень безопасности. https://docs.djangoproject.com/en/1.9/topics/http/sessions/

+0

Ответы только на ссылки очень разочарованы. –

+1

Я вижу, но разве это не так? –

+2

Ссылки со временем ухудшаются. Ожидается, что ответы на SO будут полезны будущим пользователям, поэтому они должны быть автономными. –

0

Вы должны добавить защиту CSRF в запретить формы, направляющую из ненадежных источников. Погрузитесь в вопрос What is a CSRF token ? What is its importance and how does it work?, чтобы понять, как это работает, а также вы можете посмотреть на How does a CSRF token prevent an attack.

Вы можете реализовать собственную логику защиты csrf или использовать существующую, например, Django CSRF или Flask CSRF Protection и т. Д. (Это зависит от технологий, используемых в вашем проекте).

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