Đối tượng nghiên cứu của đề tài bao gồm: - Các chức năng cơ bản của một mạng xã hội, như đăng ký, đăng nhập, đăng bài, bình luận,thích, nhắn tin, thông báo, … - Công nghệ cơ sở dữ liệu s
MÔ TẢ - GIỚI THIỆU ĐỀ TÀI
Sơ lược về đề tài
Mục đích: Tìm hiểu, phát hiện một vài lỗi, lỗ hổng có thể tấn công vào trang web sau đó tiến hành kiểm thử và sửa lỗ hổng đó.
Yêu cầu: Hiểu rõ được các hình thức tấn công, kiểm thử các tấn công đó và sửa thành công một vài lỗi, lỗ hổng có thể phát sinh.
Tổng quan về trang web : Xây dựng trang mạng xã hội ALOHCMUTE bằng String Boot +
JSP/JSTL + Bootstrap +JPA +SQL Sever Tìm hiểu các giải pháp phòng chống, bảo vệ và sử dụng các kỹ thuật, công cụ hỗ trợ để xây dựng mạng xã hội Web an toàn.
Mục tiêu của đề tài: phát triển một mạng xã hội, có tên là ALOHCMUTE, nhằm tạo ra một nền tảng kết nối cho mọi người thông qua các chức năng như đăng hình, bài viết, bình luận. Mạng xã hội bao gồm những mục tiêu cụ thể như sau:
- Phát triển một giao diện thân thiện, trực quan giúp người dùng dễ dàng tương tác và tham gia vào các hoạt động trên ALOHCMUTE.
- Phát triển các tính năng chính như đăng hình ảnh, viết bài, bình luận, nhắn tin, nhằm tạo ra một môi trường giao tiếp và kết nối đa dạng cho người dùng.
Xây dựng hệ thống bảo mật và quyền riêng tư đáng tin cậy, đảm bảo tính an toàn và bảo mật cao cho thông tin cá nhân của người dùng, đồng thời cung cấp quyền kiểm soát về quyền riêng tư. Đối tượng nghiên cứu của đề tài bao gồm:
- Các chức năng cơ bản của một mạng xã hội, như đăng ký, đăng nhập, đăng bài, bình luận, thích, nhắn tin, thông báo, …
- Công nghệ cơ sở dữ liệu sql server: SQL Server là hệ quản trị cơ sở dữ liệu quan hệ của Microsoft, sử dụng rộng rãi để quản lý và lưu trữ dữ liệu trong các ứng dụng doanh nghiệp Hỗ trợ ngôn ngữ truy vấn SQL và cung cấp tính năng bảo mật, quản lý giao dịch và khả năng mở rộng.
- Công nghệ spring boot: Spring Boot là dự án con của Spring Framework, tối giản hóa việc phát triển ứng dụng Java Cung cấp cách tiếp cận dễ dàng và tích hợp tốt với nhiều công nghệ, hỗ trợ Dependency Injection, RESTful API và quản lý configuration.
- Công nghệ bootstrap: Bootstrap là framework CSS và JavaScript của Twitter, cung cấp template và thành phần giao diện người dùng cho phát triển web Giúp tạo giao diện đáp ứng, thân thiện và tương thích trên nhiều thiết bị.
Tạo tài khoản Đăng nhập Đăng xuấtXem bài viếtTạo bài viếtChỉnh sửa bài viếtBình luận bài viếtLike bài viếtNhắn tinChỉnh sửa thông tin cá nhân
Các bảng trong cơ sở dữ liệu (Mô hình Diagram)
TT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 user_id int ID_Khóa chính
2 address nvarchar Địa chỉ nơi ở
4 email nvarchar Email đăng nhập
7 phone nvarchar Số điện thoại
9 user_name nvarchar Tên của người dùng
Mô tả bảng Users 2.2 Bảng Profiles
TT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 profile_id int ID_Khóa chính
2 avatar nvarchar Link ảnh avatar
3 background nvarchar Link ảnh bìa
4 user_id int ID của User là chủ của Profile
Mô tả bảng Profiles 2.3 Bảng Messages
TT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 message_id int ID_Khóa chính
2 [content] nvarchar Nội dung tin nhắn
3 create_time datetime2 Ngày gửi tin nhắn
4 message_type nvarchar Loại trò chuyện
5 receiver_id int ID của người nhận tin nhắn
7 user_id int ID User là chủ của Message
Mô tả bảng Messages 2.4 Bảng Posts
TT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 post_id int ID_Khóa chính
2 [content] nvarchar Nội dung bài viết
3 image_data varbinary Dữ liệu ảnh
4 post_time nvarchar Thời gian tạo bài viết
5 privacy_level bit Số lượng thả cảm xúc của bài viết
6 user_id int ID User là chủ của bài Post
Mô tả bảng Posts 2.5 Bảng Comments
TT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 comment_id int ID_Khóa chính
2 [content] nvarchar Nội dung bình luận
3 create_time datetime2 Thời gian tạo bình luận
4 image varbinary Thêm ảnh vào bình luận
5 comment_reply_id Int ID của bình luận được trả lời
6 post_id Int ID của bài viết
7 user_id int ID của User là chủ của comment
Mô tả bảng Comments 2.6 Bảng Likes
TT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 like_id int ID_Khóa chính
3 post_id Int ID của bài viết
4 user_id int ID của User là chủ của like
Thiết kế giao diện
Giao diện trang đăng nhập
STT Tên Định dạng Sự kiện
3 Sign In Button Khi ấn vào, nếu tài khoản hợp lệ, chuyển đến trang chủ, nếu không hợp lệ, hiện thông báo lỗi.
4 Registration Link Chuyển sang trang đăng ký.
Mô tả trang đăng nhập
Giao diện trang đăng ký
STT Tên Định dạng Sự kiện
5 Register Button Xác nhận đăng ký
6 Login here Link Chuyển sang trang đăng nhập.
Mô tả trang đăng ký
STT Tên Định dạng Sự kiện
1 Home Button Chuyển hướng đến trang Home
2 Trang cá nhân Button Xem các bài post của chính User
3 Search Button Tìm kiếm User khác
4 Chat Box Icon Mở trang trò chuyện
5 Account Icon Thực hiện chức năng với tài khoản
6 Notification List Link Hiển thị thông báo
7 Post Button Hiện ra modal tạo bài viết
8 Danh sách bài viết List Card Hiển thị các bài Posts
9 Danh sách liên hệ List Link Mở trang cá nhân của người dùng
Giao diện trang nhắn tin
STT Tên Định dạng Sự kiện
1 Tìm kiếm Input Tìm kiếm cuộc trò chuyện
2 Danh sách các cuộc trò chuyện List Link Mở cuộc trò chuyện
3 Thông tin cuộc trò chuyện Image, Text
4 Gọi thoại Button Gọi thoại
5 Cài đặt Button Cài đặt thông tin cuộc trò chuyện
6 Gửi ảnh Button Gửi tin nhắn dạng ảnh
8 Danh sách các tin nhắn List Card
12 Gửi Button Gửi tin nhắn đã soạn
13 Ảnh đại diện Image Ảnh đại diện của cuộc trò chuyện
Bảng 61: Mô tả trang nhắn tin
Giao diện trang cá nhân (Tab bài viết)
Giao diện trang cá nhân (Tab thông tin)
Hướng dẫn cài đặt
- Link project: Mạng xã hội ALOHCMUTE
- Ngôn ngữ lập trình: Java
- Cơ sở dữ liệu: SQL Server
- Server: Apache Tomcat server (version 9.0)
4.2.Hướng dẫn cài đặt môi trường
- Để phát triển bất kỳ một ứng dụng nào trên nền tảng Java thì trước tiên cần cài đặt JDK JDK là bộ công cụ cho việc phát triển ứng dụng bằng ngôn ngữ lập trình Java
- Nếu đã cài đặt JDK thì có thể bỏ qua bước này a) Download JDK (Java Development Kit)
- Sau đó cài đặt bình thường. b) Thiết lập biến môi trường
Bước 1: Nhấp chuột phải vào My Computer → Properties → Advanced system settings → Advanced → Environment Variables.
Bước 2: Nhấn New để tạo mới một biến môi trường có tên JAVA_HOME Nhập các giá trị sau:
Bước 3: Cập nhật biến môi trường Path.
- Nếu đã cài đặt Maven thì có thể bỏ qua bước này.
- Chọn phiên bản thích hợp (maven 3.9.4) để thiết lập.
- Lặp lại các bước giống thiết lập biến môi trường của JDK Thay JAVA_HOME thành MAVEN_HOME.
- Nếu đã cài đặt Tomcat thì có thể bỏ qua bước này.
4.2.4 Cài đặt Eclipse a) Cài đặt Eclipse IDE for Java EE Developers.
- Download Eclipse IDE for Java EE Developers tại đây, nó hỗ trợ viết ứng dụng web.
- Sau khi download, giải nén và sử dụng trực tiếp, ko cần cài đặt. b) Thiết lập biến môi trường
- Trên thanh công cụ của Eclipse : Chọn Windows Prefernces để bắt đầu thiết lập.
JDK: Chọn và nhập các giá trị như trên hình :
Maven: Chọn và nhập các giá trị như trên hình :
Tomcat 9: Chọn và nhập các giá trị như trên hình :
- Chạy Server Tomcat 9: Chọn vào Servers ở dưới của Eclipse
Chọn như trên hình và nhấn Start.
- Nếu đã cài đặt SQL Server thì có thể bỏ qua bước này.
- Download SQL Server cho Developer tại đây.
Tiến hành chạy chương trình
Bước 1: Import project vào IDE Eclipse
Bước 2: Tạo Database trên SQL Server cho project Đăng nhập bằng sa.
Bước 3: Đổi lại datename, usename và password trong file application.properties theo tài khoản sa và password của bạn.
Bước 4: Tiến hành chạy project
Nhấn chuột phải vào project chọn Run As > Java Application.
Mở trình duyệt và nhập: http://localhost: 9090/login
Sẽ vào trang login của trang web.
Demo chương trình
- Link host: http://localhost: 9090/login
- Link clip báo cáo demo: Báo cáo cuối kỳ môn Bảo mật web - Nhóm 09
BẢO MẬT WEBSITE
Tạo Transport Layer Security
Trong project này để nâng tính năng bảo mật cho web Mạng xã hội ALOHCMUTE, nhóm đã nâng cấp giao thức của trang web từ HTTP lên HTTPS.
HTTPS là phiên bản bảo mật của phương thức HTTP.
HTTP (Hypertext Transfer Protocol) là một giao thức truyền tải thông tin giữa máy chủ web và trình duyệt web của người dùng Dữ liệu truyền qua HTTP không được mã hóa, điều này có nghĩa là thông tin như tên người dùng, mật khẩu và bất kỳ dữ liệu khác được gửi qua mạng dễ dàng bị đánh cắp bởi bên thứ ba nếu họ có cách để theo dõi giao tiếp mạng.
Trái lại, HTTPS (Hypertext Transfer Protocol Secure) cung cấp một lớp bảo mật bằng cách sử dụng SSL (Secure Sockets Layer) hoặc TLS (Transport Layer Security) để mã hóa dữ liệu được truyền giữa máy chủ và trình duyệt Dữ liệu được mã hóa trước khi được gửi đi, và chỉ có máy chủ và trình duyệt có khả năng giải mã nó Điều này làm cho nó khó khăn hơn cho bên thứ ba để đánh cắp hoặc thay đổi dữ liệu trong quá trình truyền tải Do đó, HTTPS thường được sử dụng cho các trang web yêu cầu bảo mật cao, như các trang web thương mại điện tử, ngân hàng trực tuyến và các dịch vụ yêu cầu nhập thông tin cá nhân hoặc tài khoản.
1.2 Nâng cấp lên HTTPS: cấu hình server và deploy
- Đầu tiên phải tạo keystore bằng cách vào cmd với quyền admin chạy đoạn code :
- Sau khi tạo keystore, sẽ xuất hiện 1 file javaexpert.jks
- Thêm file javaexpert.jks vào src/main/resouces:
- Thêm đoạn code dưới đây vào file application.xml của project. server.ssl.key-alias=javaexpert server.ssl.key-store=classpath:javaexpert.jks server.ssl.key-store-password3456 server.ssl.key-store-type=JKS
- Kết quả khi nâng từ HTTP lên HTTPS:
Cross-site scripting
Cross-Site Scripting (XSS) là một loại tấn công trong lĩnh vực bảo mật web Trong tấn công XSS, kẻ tấn công tiêm mã độc hại, thường là JavaScript và HTML, vào các trang web hoặc ứng dụng web mà người dùng truy cập Khi người dùng truy cập các trang web này, mã độc hại sẽ thực thi trong trình duyệt của họ mà không cần sự chấp nhận của họ, gây ra các hậu quả như đánh cắp thông tin người dùng, thay đổi nội dung trang web, hoặc thậm chí kiểm soát trình duyệt của họ.
XSS thường xảy ra khi ứng dụng web không kiểm tra hoặc xử lý đúng đắn đầu vào từ người dùng, cho phép kẻ tấn công chèn mã độc hại Mục đích của kẻ tấn công thường là:
Đánh cắp thông tin cá nhân: Kẻ tấn công có thể sử dụng XSS để đánh cắp thông tin nhạy cảm như tên người dùng, mật khẩu hoặc cookie phiên hoạt động.
Thực hiện hành động không mong muốn: XSS có thể được sử dụng để thực hiện các hành động không mong muốn trên trang web, như thay đổi nội dung của trang, gửi các request không mong muốn, hoặc thậm chí kiểm soát trình duyệt của người dùng.
Mạo danh người dùng: Bằng cách đánh cắp thông tin đăng nhập hoặc cookie phiên hoạt động, kẻ tấn công có thể mạo danh người dùng và thực hiện các hoạt động trái phép trên tài khoản của họ.
Tấn công phishing: XSS cũng có thể được sử dụng để tạo ra các trang web giả mạo, lừa đảo người dùng và lấy thông tin cá nhân của họ.
2.2 Các loại tấn công XSS:
Mô tả: Kẻ tấn công chèn mã độc hại vào các tham số của URL hoặc các biểu mẫu trên trang web Khi người dùng truy cập vào các liên kết hoặc gửi biểu mẫu chứa mã độc hại, mã sẽ được thực thi ngay lập tức trong trình duyệt của họ.
Nguy hiểm: Người dùng có thể trở thành nạn nhân mà không hề hay biết, và thông tin cá nhân của họ có thể bị đánh cắp hoặc bị lợi dụng.
Mô tả: Mã độc hại được lưu trữ trên máy chủ và được phục vụ từ đó mỗi khi một người dùng truy cập vào trang chứa mã này Thường xuyên xuất hiện trong các hệ thống cho phép người dùng tạo nội dung, chẳng hạn như diễn đàn hoặc hệ thống bình luận.
Nguy hiểm: Mã độc hại có thể ảnh hưởng đến nhiều người dùng và tồn tại trong thời gian dài, tăng nguy cơ cho việc đánh cắp thông tin cá nhân và thực hiện các hành động không mong muốn.
Tấn công DOM Based XSS:
Mô tả: Kẻ tấn công lợi dụng lỗ hổng trong mã JavaScript của trang web để chèn mã độc vào DOM của trang, thường thông qua các sự kiện trình duyệt như onload, onclick, và onmouseover.
Nguy hiểm: Vì không có sự tương tác với máy chủ, tấn công này khó phát hiện và nguy hiểm
Kẻ tấn công có thể thực hiện các hành động độc hại mà không cần gửi yêu cầu đến máy chủ.
Tất cả ba loại tấn công này đều có thể gây ra hậu quả nghiêm trọng, từ việc đánh cắp thông tin cá nhân đến việc thực hiện các hành động không mong muốn trên trang web hoặc kiểm soát trình duyệt của người dùng.
Xác thực đầu vào (Data validation):
Mô tả: Xác thực đầu vào từ người dùng là quá trình kiểm tra và đảm bảo rằng dữ liệu nhập vào đáp ứng các tiêu chuẩn xác định trước.
Kiểm tra các giá trị nhập vào có phù hợp với các định dạng mong muốn hay không.
Xác thực các loại dữ liệu như số nguyên, số thực, email, địa chỉ IP, v.v.
Lợi ích: Giúp loại bỏ hoặc giảm thiểu nguy cơ XSS bằng cách loại trừ dữ liệu không an toàn từ người dùng.
Mô tả: Lọc đầu vào người dùng bằng cách loại bỏ hoặc thay thế các phần của dữ liệu có chứa các ký tự nguy hiểm hoặc các chuỗi đặc biệt.
Xóa hoặc thay thế các ký tự nguy hiểm như , ", '.
Loại bỏ các thẻ HTML và JavaScript từ dữ liệu nhập vào.
Lợi ích: Ngăn chặn việc chèn mã độc hại vào các trang web bằng cách loại bỏ các ký tự và chuỗi độc hại từ dữ liệu người dùng.
Mô tả: Ký tự escape là quá trình chuyển đổi các ký tự đặc biệt thành các phiên bản mã hoặc ký tự an toàn.
Thay thế các ký tự như , & bằng các phiên bản mã như <, >, &.
Sử dụng các hàm escape có sẵn trong các ngôn ngữ lập trình như htmlspecialchars() trong PHP. Lợi ích: Ngăn chặn việc các ký tự đặc biệt được hiểu như các thẻ HTML hoặc JavaScript bằng cách chuyển đổi chúng thành các phiên bản an toàn.
Kiểm thử phần mềm (Software testing):
Các lỗi quét ra bằng OWASP ZAP
3.1 Cross-domain javascript source file inclusion
Cross-domain javascript source file inclusion là một cảnh báo về bảo mật có thể ảnh hưởng đến một ứng dụng web chạy một hoặc nhiều tệp JavaScript từ một miền bên thứ ba Nếu bên thứ ba có chứa nội dung độc hại một cách cố ý hoặc không cố ý, nó có thể được thêm vào và thực thi trên ứng dụng web của nạn nhân Khả năng này xảy ra khi tệp JavaScript bên ngoài không được xác thực Điều này có thể dẫn đến rò rỉ dữ liệu người dùng.
Tác động của Cross-Domain JavaScript Source File Inclusion bao gồm:
Khả năng thực thi mã JavaScript độc hại
Khả năng can thiệp vào và rò rỉ dữ liệu người dùng
Khả năng thay đổi chức năng và chuyển hướng dữ liệu
Nhiễm phần mềm độc hại
Cách ngăn chặn Cross-Domain JavaScript Source File Inclusion bao gồm:
Chủ sở hữu nên tự quản lý các ứng dụng web của họ Bạn có thể ủy quyền cho bên thứ ba quản lý trang web, nhưng cần phải chắc chắn rằng họ được công nhận và tin cậy.
Tránh đặt thông tin nhạy cảm bên trong các tệp JavaScript hoặc JSONP.
Luôn cố gắng làm sạch các mục nhập người dùng được lưu trữ trong các tệp JSON.
Sử dụng tính toàn vẹn của nguồn phụ (SRI): Triển khai SRI để đảm bảo tính toàn vẹn của các tập lệnh đang được tải SRI cho phép bạn chỉ định hàm băm của tệp tập lệnh và trình duyệt sẽ chỉ thực thi tập lệnh nếu hàm băm khớp Điều này ngăn chặn mọi hành vi giả mạo hoặc sửa đổi tệp tập lệnh.
Kích hoạt Chính sách Bảo mật Nội dung (CSP).
Project đang nhúng một tệp JavaScript nhưng không có các biện pháp bảo mật phù hợp sẽ gây ra vấn đề cross-domain JavaScript source file inclusion. Ở đây ta sẽ sử dụng tính toàn vẹn của nguồn phụ (SRI) để phòng tránh lỗi này.
Thay thế thẻ tập lệnh sau bao gồm thuộc tính SRI :
- integrity: Thuộc tính này chứa giá trị băm SHA-384 của tệp JavaScript Điều này đảm bảo rằng trình duyệt chỉ thực thi tệp JavaScript nếu giá trị băm của nó khớp với giá trị băm được chỉ định ở đây Nếu tệp JavaScript được thay đổi từ bất kỳ nguồn nào (bao gồm CDN), giá trị băm sẽ không khớp và trình duyệt sẽ không thực thi mã JavaScript.
- crossorigin: Thuộc tính này xác định cách trình duyệt xử lý các yêu cầu CORS (Cross-Origin Resource Sharing) Trong trường hợp này, crossorigin="anonymous" chỉ định rằng yêu cầu tải tệp JavaScript không bao gồm thông tin xác thực của người dùng Điều này đảm bảo rằng trình duyệt không gửi thông tin nhận dạng cá nhân khi tải tệp JavaScript từ một nguồn khác.
Missing anti-clickjacking header là một vấn đề bảo mật mà một trang web không cung cấp các tiêu đề cần thiết để bảo vệ khỏi các cuộc tấn công clickjacking
Clickjacking là một loại tấn công đánh lừa người dùng bằng cách ẩn hoặc làm mờ một phần của trang web và thực hiện các hành động không mong muốn khi người dùng nhấp chuột vào một đối tượng khác mà họ nghĩ rằng đang nhấp vào Kẻ tấn công có thể sử dụng kỹ thuật này để đánh cắp thông tin cá nhân của người dùng, lừa họ click vào quảng cáo để kiếm tiền, tạo ra sự tương tác giả mạo trên các trang web xã hội, hoặc thậm chí cài đặt mã độc lên máy chủ web.
Clickjacking có thể mang lại nhiều rủi ro như sau:
Lấy cắp thông tin cá nhân: Kẻ tấn công có thể sử dụng clickjacking để tạo ra một biểu mẫu giả mạo và lừa người dùng điền thông tin cá nhân như tên đăng nhập, mật khẩu, thông tin tài khoản ngân hàng, và sau đó lấy cắp thông tin này.
Lừa người dùng kích hoạt webcam hoặc microphone: Bằng cách ẩn các nút kích hoạt webcam hoặc microphone dưới các phần tử khác, kẻ tấn công có thể lừa người dùng nhấp chuột vào những vùng đó, mà họ nghĩ là không liên quan, để kích hoạt các thiết bị này mà không được phép.
Phát tán worm trên mạng xã hội: Clickjacking có thể được sử dụng để lừa người dùng chia sẻ nội dung giả mạo hoặc độc hại trên các mạng xã hội, từ đó lan truyền các worm hoặc nội dung độc hại đến các tài khoản khác.
Phát tán malware: Kẻ tấn công có thể sử dụng clickjacking để chuyển hướng người dùng tới các trang web hoặc liên kết tải xuống chứa malware, dẫn đến việc cài đặt phần mềm độc hại trên máy tính của họ.
Quảng cáo lừa đảo: Clickjacking cũng có thể được sử dụng để lừa đảo người dùng nhấp chuột vào quảng cáo giả mạo hoặc không mong muốn, từ đó tạo ra doanh thu cho kẻ tấn công hoặc phát tán nội dung không đáng tin cậy.
X-Frame-Options Header là một tính năng bảo mật trong HTTP header được sử dụng để ngăn chặn việc chèn trang web vào các khung (frames) của các trang web khác mà không được phép. Điều này giúp ngăn chặn các cuộc tấn công clickjacking, nơi kẻ tấn công cố gắng lừa người dùng nhấp chuột vào các phần tử trên trang web một cách không mong muốn.
X-Frame-Options Header có ba giá trị chính:
DENY: Đặt giá trị này sẽ ngăn chặn bất kỳ trang web nào, bao gồm cả trang web cùng miền, khỏi việc chèn trang web đó vào bất kỳ khung nào bằng thẻ Điều này cung cấp mức độ bảo mật cao nhất nhưng cũng có thể làm hỏng một số tính năng của trang web.
SAMEORIGIN: Đặt giá trị này sẽ chỉ cho phép trang web được chèn vào khung bằng thẻ