Защита учетных данных пользователя в приложении-колбе, которое не использует базу данных, а использует веб-очистку - PullRequest
0 голосов
/ 19 октября 2018

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

Это мои вопросы:

  1. Какой самый безопасный способ использования их учетных данных, убедитесь, что пароль всегда защищен и хеширован, а также удален с сервера, как толькопрограмма может войти в систему, используя свои учетные данные?
  2. Каким образом я должен защищать их учетные данные?Я не использую свое приложение фляги с базой данных, я использую их учетные данные, чтобы войти в другое место и очистить некоторые данные.

Ниже приведены файлы о том, как я сейчас это делаю.Я знаю, что это крайне небезопасно.

Таким образом, после входа пользователя в мое приложение файл rout.py показывает, как я принимаю запрос POST для инструмента скребка и записываю его в отдельный файл, содержащий глобальную переменную для имени пользователя студентов ипароль.

from flask import Flask, render_template
from flask import request
from flask import render_template, redirect, url_for, request, jsonify
import settings
import json


app = Flask(__name__)

@app.route('/')
def home():
 return render_template('landing.html')

@app.route('/webScraperTool', methods =['POST'])
def webScraperTool():
 settings.email = request.form['email'];
 settings.password = request.form['password'];

 import UniversitySiteScraperTool
 return jsonify(settings.jsonObjects)
if __name__ == '__main__':
    app.run(debug=True)

Файл настроек содержит глобальную переменную для учетных данных.

global email
email = ""
global password
password = ""

И, наконец, мой UniversitySiteScraperTool будет использовать глобальные переменные и использовать драйвер chrome для автоматизации входа в систему.

import pandas as pd
import os
import re
import numpy as np
import datetime
import sys
import settings
import json

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC

################# DRIVER CODE PORTION #################
# Executable path ->

    driver = webdriver.Chrome(executable_path=settings.dirpath + '/chromedriver')
    #Url to DWORKS
url = "University Website URL"
driver.get(url)


##username and password##
usernameStr = settings.email
passwordStr = settings.password

username = driver.find_element_by_id('username')
username.send_keys(usernameStr)

password = driver.find_element_by_id('password')
password.send_keys(passwordStr)

nextButton = driver.find_element_by_css_selector('#welcome > div > div.row.btn-row > input.btn-submit')
#After I fill in their credentials, click the submit button
nextButton.click()

1 Ответ

0 голосов
/ 19 октября 2018

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

Сказав это, вы на самом деле не «записываете в отдельный файл», как вы заявляете, а просто имя пользователя и пароль просто хранятся в памяти, даже если эти переменные содержатся в другом файле.

По этой причине я бы подумал, что для вас было бы проще иметь класс скребка, который получает имя пользователя и пароль при создании экземпляра.Затем, когда он будет завершен и объект будет уничтожен, имя пользователя и пароль будут уничтожены вместе с ним.

По сути, структура будет выглядеть в значительной степени так, как у вас, но обернута в класс:

class Scraper(object):
    __init__(self, username, password):
        self.username = username
        self.password = password
        self.driver = webdriver.Chrome(executable_path=settings.dirpath + '/chromedriver')

    scrape_site(self):
        url = "University Website URL"
        driver.get(url)

        username = driver.find_element_by_id('username')
        username.send_keys(self.username)

        password = driver.find_element_by_id('password')
        password.send_keys(self.password)

        nextButton = driver.find_element_by_css_selector('#welcome > div > div.row.btn-row > input.btn-submit')
        nextButton.click()

Затем вы можете использовать этот код в своем основном приложении следующим образом:

from UniversitySiteScraperTool import Scraper
Scraper(request.form['email'], request.form['password']).scrape_site()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...