Bảo vệ phiên làm việc

Một phần của tài liệu Xây dựng hệ thống bảo vệ ứng dụng web dựa trên tường lửa modsecurity và iptables (Trang 28 - 31)

Theo mặc định, thông tin phiên làm việc trong PHP được viết vào một thư mục tạm thời. Hãy xem xét biểu mẫu trong Liệt kê 5, nó cho thấy cách lưu một mã nhận dạng người sử dụng và số tài khoản trong một phiên làm việc.

Hình 2.5: Liệt kê 5 - Lưu trữ dữ liệu trong phiên

Liệt kê 6 cho thấy nội dung của thư mục /tmp.

Hình 2.6: Liệt kê 6 - Các tập tin phiên trong thư mục /tmp

Như ta có thể thấy, tệp tin phiên, khi được in ra (xem Liệt kê 7), chứa các thông tin trong một định dạng khá dễ đọc. Vì tệp tin phải đọc được và viết được đối với người sử dụng máy chủ web, các tệp tin phiên này có thể tạo ra một vấn đề lớn đối với bất cứ người nào trên một máy chủ chia sẻ. Người nào đó không phải là ta có thể viết một kịch bản lệnh đọc các tệp tin này để họ có thể thử lợi dụng phiên làm việc đó.

Hình 2.7: Liệt kê 7 – Nội dung của một tập tin phiên

Ta có thể làm hai điều để bảo vệ dữ liệu phiên của ta. Trước tiên là mã hóa mọi thứ mà ta đưa vào phiên. Tuy nhiên chỉ riêng việc ta đã mã hóa dữ liệu không có nghĩa là nó đã an toàn trọn vẹn, do đó hãy cẩn thận, đừng tin tưởng vào việc này như là phương tiện duy nhất của ta để bảo vệ phiên làm việc của mình. Có cách khác là lưu dữ liệu phiên của ta ở một nơi khác, ví dụ như một cơ sở dữ liệu. Ta vẫn phải đảm bảo rằng ta đang khóa kín cơ sở dữ liệu của ta, nhưng cách tiếp cận này giải quyết được hai vấn đề: Trước nhất, nó đặt dữ liệu của ta vào một nơi an toàn hơn một hệ thống tệp tin chia sẻ; thứ hai, nó cho phép ứng dụng của ta mở rộng trải ra bao gồm nhiều máy chủ web dễ dàng hơn với các phiên được chia sẻ xuyên qua nhiều máy chủ.

Để thực hiện ghi lưu bền vững các dữ liệu về phiên làm việc của chính ta, xem hàm session_set_save_handler() trong PHP. Dùng nó, ta có thể lưu trữ thông tin phiên trong một cơ sở dữ liệu hoặc triển khai thực hiện một trình xử lý

một thí dụ về cách sử dụng hàm này và các hàm khung cho việc triển khai thực hiện. Ta cũng có thể kiểm tra các thí dụ về cách sử dụng một cơ sở dữ liệu.

Mật khẩu sẽ tuyệt đối không bao giờ được lưu giữ ở dạng văn bản rõ ở bất kỳ nơi nào — không được nằm trong một cơ sở dữ liệu, phiên làm việc, hệ thống tệp tin, hoặc ở bất kỳ dạng nào khác. Cách tốt nhất để xử lý các mật khẩu là lưu chúng đã mã hóa và so sánh với các mật khẩu đã mã hóa với nhau. Mặc dù điều này có vẻ là hiển nhiên, song việc lưu giữ chúng ở dạng văn bản rõ dường như được làm khá nhiều trong thực tế. Bất cứ khi nào ta sử dụng một trang web mà có thể gửi cho ta mật khẩu của ta thay vì việc đặt lại, điều đó có nghĩa là hoặc mật khẩu được lưu ở dạng văn bản rõ hoặc đã có mã lệnh sẵn để giải mã mật khẩu nếu nó được mật mã hóa. Ngay cả ở trường hợp sau, mã lệnh để giải mã có thể tìm thấy và khai thác được.

Một phần của tài liệu Xây dựng hệ thống bảo vệ ứng dụng web dựa trên tường lửa modsecurity và iptables (Trang 28 - 31)