在不使用数据库的flask应用程序中保护用户的凭据,这是一种web抓取

2024-04-26 00:38:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我大学的学生创建一个网络应用程序。他们将输入他们的电子邮件和他们的大学证书密码,我的申请将采取他们的密码,为他们登录大学网站,并刮取一些数据,将以更好的方式呈现。你知道吗

以下是我的问题:

  1. 使用他们的凭据的最安全的方法是什么?确保密码始终是安全的并经过哈希处理,程序可以使用他们的凭据登录后立即从服务器上删除密码?你知道吗
  2. 我应该以什么方式安全地对待他们的证件?我不是用我的flask应用程序和数据库,我是用他们的凭据登录到其他地方,并刮取一些数据。你知道吗

下面是我目前如何做的文件。我知道它非常不安全。你知道吗

所以在用户登录到我的应用程序之后路线.py文件显示了我如何接受scraper工具的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 = ""

最后,我的universitystesscrapertool将使用全局变量并使用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()

Tags: 文件fromimportapp密码flaskbysettings
1条回答
网友
1楼 · 发布于 2024-04-26 00:38:41

由于您只是在抓取一个以明文形式获取用户名和密码的站点,因此您实际上没有一种好的方法来安全地存储用户的密码,同时仍然使其可恢复,以便您可以抓取该站点。你知道吗

话虽如此,您并不是真的像您所说的那样“写入一个单独的文件”,而是用户名和密码只是保存在内存中,即使这些变量包含在不同的文件中。你知道吗

出于这个原因,我认为让scraper工具成为一个在实例化时接收用户名和密码的类会更简单。当它完成并且对象被销毁时,用户名和密码也随之被销毁。你知道吗

基本上,结构看起来很像您所拥有的,但是包装在一个类中:

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()

相关问题 更多 >