Các lỗi bảo mật website ngày càng đa dạng, với nhiều hình thức tấn công và gây thiệt hại nghiêm trọng. Làm thế nào để bảo mật website toàn diện, bài viết này sẽ đưa ra những lỗi bảo mật website phổ biến nhất, kèm theo ví dụ và những giải pháp cụ thể.
Vậy nguyên nhân gây ra các lỗ hổng bảo mật website là gì ?
1. Phần mềm, ứng dụng miễn phí
– Cũng như những phần mềm miễn phí tải về máy tính bị nhiễm virus, có những loại virus bạn chỉ cần CCleaner, bkav, hoặc phần mềm diệt virus thông thường cũng có thể tránh được sự cố bảo mật về website, máy tính cá nhân. Tuy nhiên có những phần mềm bạn không thể xóa được mà cần phải nhờ sự giúp đỡ của những người có chuyên môn.
– Ứng dụng miễn phí cũng vậy, những ứng dụng này sẽ ngấm ngầm sao lưu dữ liệu thông tin của bạn gửi tới những kẻ xấu và bạn có thể bị mất tiền nếu muốn chuộc lại. Và gần đây nhất không đâu xa, quý I đầu năm 2017, hàng loạt vụ báo cáo về việc bị nhiễm phần mềm tống tiền Ransomware ảnh hưởng tới website, iphone, thiết bị IoT.
2. Lỗ hổng trong việc sử dụng bảng mã Unicode
Sự phát triển của hệ thống kí tự ASCII mã hóa dựa trên các chữ cái tiếng Anh phổ biến toàn cầu. Theo thời gian, thế giới bắt đầu sử dụng các ngôn ngữ và hệ thống bảng chữ cái khác. Do 1 byte không thể dùng để lưu trữ kí tự trong tất cả các ngôn ngữ, một hệ thống mã hóa mới dành cho các ngôn ngữ đa dạng đã được ra mắt. Đó chính là chuẩn Unicode.
Trong hệ thống Unicode, mỗi kí tự được lưu trữ lớn hơn 1 byte. Bảng mã UTF-8 là bảng mã nền tảng Unicode được sử dụng rộng rãi nhất, cho phép tin tặc có thể chèm một vài kí tự ví dụ “../” theo các cách khác nhau. Bộ giải mã UTF-8 không kiểm tra tính hợp lệ của kí tự đặc biệt như “/” gây ra những exception (ngoại lệ) khi xử lý cho hệ thống. Ví dụ, để nói về các bảng mã, hãy cùng xem những đường link giống nhau được viết trong hệ thống bảng mã khác nhau:
Trong các hệ thống mã hóa khác nhau, kí tự sẽ được lưu trữ trong các vị trí khác nhau. Do đó, bộ lọc danh sách đen các kí tự đầu vào sẽ yêu cầu sử dụng tất cả các bộ kí tự. Cách phòng chống kiểu tấn công này là chuyển đổi tất cả dữ liệu thành một định dạng thống nhất. Sau đó chúng ta mới có thể kiểm thử chúng hợp lệ hay không và loại bỏ kí tự không mong muốn.
3. Lỗ hổng PHP Injection
Ngôn ngữ lập trình có chứa các hàm cho phép thực thi mã bên ngoài, như: require(), include(), eval(), and preg_replace cùng với modifier /e sẽ xem nơi lưu trữ chuỗi kí tự như một PHP code. Ví dụ, giả sử trang web có một bộ điều khiển đơn giản dựa trên các tập tin là các biến gửi qua phương thức GET để đưa vào nội dung của một file có trước.
Như chúng ta thấy tập tin được gọi thông qua bởi phương thức GET và được sử dụng thông qua hàm include(). Đó là một lỗi nguy hiểm có thể bị khai thác bởi tin tặc bằng nhiều cách khác nhau. Bất kì mã nào cũng có thể được thực thi. Ví dụ:
Đường dẫn đến mã độc được thông qua như một tham số của hàm. Kịch bản này sẽ được thực thi bởi các máy chủ của tin tặc.
Các ngăn chặn PHP Injection
Cấu hình máy chủ sẽ giúp ích bạn phòng tránh kiểu tấn công này. Các tùy chọn allow_url_fopen có thể chặn file truy cập từ bên ngoài máy chủ dành cho các hàm file_get_contents, fopen, include, và require. Các bảo vệ tốt nhất là không cho phép dữ liệu đầu vào từ người dùng vào các hàm thực thi script. Bộ lọc chuỗi kí tự đầu vào và tạo ra whitelist các file được phép là điều cần thiết. Ngoài ra còn nhiều kiểu tấn công tương tự cũng được các tin tặc khai thác như: Local File Include, Php Object Injection…
4. Lỗ hổng SQL Injection
SQL Injection là một trong những lỗ hổng bảo mật phổ biến nhất, nó thường được sử dụng để khai thác lỗ hổng của trang web trên nền tảng PHP hoặc ASP. Các cuộc tấn công bao gồm việc tiêm mã độc vào những truy vấn SQL trong ứng dụng của bạn thông qua các giá trị đầu vào của ứng dụng. Nếu thành công sẽ cho phép kẻ tấn công thêm hoặc xóa nội dung cơ sở dữ liệu, lấy các giá trị trong CSDL như email, mật khẩu hoặc thông tin cá nhân người dùng trang web. SQL Injection có thể xảy ra nếu một trang web chấp nhận những truy vấn không đáng tin cậy vào cơ sở dữ liệu hoặc tạo ra chúng một cách tự động.
Giả sử rằng các biến đăng nhập (bao gồm tên và mật khẩu) được đưa trực tiếp đến các câu truy vấn SQL thông qua phương thức POST. Một đoạn code sẽ chịu trách nhiệm xử lý việc đăng nhập của người dùng có thể dễ dàng bị tổn thương:
Nếu một người dùng trang web gửi tới máy chủ giá trị admin– trong mục tên người dùng, truy vấn SQL sẽ thực hiện như sau:
Điều gì đã xảy ra? Kí tự — sẽ được hiểu bởi DBMS như một comment, kết quả dẫn đến việc hoàn thành thực thi thất bại một phần của truy vấn SQL, phần này vốn dùng để kiểm soát mật khẩu. Tin tặc sẽ khai thác nó để chiếm quyền quản trị dịch vụ.
Cách ngăn chặn kiểu tấn công SQL Injection: Cách bảo vệ hiểu quả nhất đối với kiểu tấn công này là lọc dữ liệu mà người dùng cung cấp bằng các hàm: mysql_real_escape_string(), pg_escape_string()… Dữ liệu số phải được chuyển đổi bởi settype() or sprintf(), sau đó kiểm tra với s_numeric(), ctype_digit() nhằm định dạng dữ liệu chính xác.
Trên đây là những lỗi bảo mật website phổ biến. Hy vọng bài viết này hữu ích với các bạn đọc!
Vui lòng, điền đúng thông tin để chúng tôi gửi lại
kết quả khám bệnh website tổng quát.
Lời khuyên: Đừng quảng cáo khi chưa dùng tool này. HOÀN TOÀN MIỄN PHÍ