Giới thiệu Flask:
Flask là một Web Framework rất nhẹ của Python, dễ làm quen, giúp người mới bắt đầu học có thể tạo ra website nhỏ và giúp chúng ta hiểu cơ chế bên trong các framework khác.
Viết một web đơn giản:
- Cài đặt Flask: Vào cmd gõ lệnh: py –m pip install flask
- Tạo file app.py:
Code:
[FONT=Calibri][FONT=Times New Roman]from flask import Flask[/FONT][/FONT] [FONT=Times New Roman]app = Flask(__name__)[/FONT]
Code:
[FONT=Calibri][FONT=Times New Roman]@app.route('/')[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]def home():[/FONT][/FONT] [FONT=Times New Roman]return """Home page"""[/FONT]
Code:
[FONT=Calibri][FONT=Times New Roman]if __name__ == "__main__":[/FONT][/FONT] [FONT=Times New Roman]app.run(host="127.0.0.1", port=int("5000"))[/FONT]
Tiếp theo là vào trình duyệt, trỏ đến URL và gõ 127.0.0.1:5000
Vậy là chúng ta đã tạo được một web để làm quen cách sử dụng Flask Python.
Lấy nội dung trong file và hiển thị lên trang web:
Import các module cần thiết.
Code:
from flask import Flask, request
Code:
app = Flask(__name__)
Code:
@app.route('/get_file', methods=['GET']) def get_file(): filename = request.args['filename'] return '''Content of the file {} is...\n\n {}'''.format(filename, cat(filename))
Code:
[FONT=Calibri][FONT=Times New Roman]def cat(filename):[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]with open(filename) as file:[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]data = file.read()[/FONT][/FONT] [FONT=Times New Roman]return data[/FONT]
Code:
[FONT=Calibri][FONT=Times New Roman]if __name__ == "__main__":[/FONT][/FONT] [FONT=Times New Roman]app.run(host="127.0.0.1", port=int("5000"))[/FONT]
Vào trình duyệt và gõ 127.0.0.1/get_file .
Trên web sẽ hiện lên thông báo Bad Request, lý do là chúng ta chưa đưa thông số filename kèm theo nên server không hiểu.
Để thêm thông số filename ta gõ vào 127.0.0.1/get_file?filename=welcome.txt để đọc file welcome.txt
Thay đổi filename thành passwords.txt
Bây giờ chúng ta sẽ di chuyển file password.txt ra khỏi thư mục chứa file flask_app.py và đặt dưới thư mục chứa file flask_app.py. Để vẫn có thể truy nhập vào file passwords.txt trên ta sửa lại thành: 127.0.0.1/get_file?filename= ../passwords.txt . Như vậy chúng ta thấy được tuy file passwords không nằm chung thư mục chứa file flask_app.py nhưng vẫn có thể truy nhập đến và đọc được nội dung file nếu file passwords này đặt ở dạng plaintext. Để tránh lỗi bảo mật này xảy ra ta sẽ đi đến phần tiếp theo.
Triển khai xác định đầu vào:
Import thư viện re ở đầu file flask_app.py:
Code:
Import re
Code:
[FONT=Calibri]def sanitize_string(filename):[/FONT] [FONT=Calibri]if re.search('^[\w\-\.]+$', filename):[/FONT] [FONT=Calibri]pass[/FONT] [FONT=Calibri]else:[/FONT] [FONT=Calibri]raise ValueError('Can not use special characters')[/FONT]
Code:
[FONT=Calibri][FONT=Times New Roman]def cat(filename):[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]sanitize_string(filename)[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]with open(filename) as file:[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]data = file.read()[/FONT][/FONT] [FONT=Times New Roman]return data[/FONT]
Vào trình duyệt và gõ: 127.0.0.1/get_file?filename= ../passwords.txt .
Lúc này chúng ta không còn truy cập vào file passwords chứa dữ liệu nhãy cảm này nữa.
Hoàn thành.
Nguồn : VNPRO