Menu
×

Được chứng nhận

Ghi lại kiến ​​thức của bạn

Đăng nhập Đăng ký

Tạo Tài khoản Example.com.vn miễn phí để cải thiện trải nghiệm học tập của bạn

Người tìm đường và việc học của tôi

Theo dõi tiến độ học tập của bạn tại Example.com.vn và thu thập phần thưởng

Nâng cấp

Trở thành người dùng PLUS và mở khóa các tính năng mạnh mẽ (không có quảng cáo, lưu trữ, hỗ trợ, ..)

Bắt đầu từ đâu

Bạn không chắc chắn muốn bắt đầu từ đâu? Đi theo con đường được hướng dẫn của chúng tôi

Trình chỉnh sửa mã (Dùng thử)

Với trình chỉnh sửa mã trực tuyến của chúng tôi, bạn có thể chỉnh sửa mã và xem kết quả trong trình duyệt của mình

Video

Tìm hiểu những điều cơ bản về HTML qua video hướng dẫn thú vị và hấp dẫn

Mẫu

Chúng tôi đã tạo một loạt mẫu trang web đáp ứng mà bạn có thể sử dụng - miễn phí!

Web hosting

Lưu trữ trang web của riêng bạn và chia sẻ nó với mọi người với Example.com.vn Spaces

Tạo một máy chủ

Tạo máy chủ của riêng bạn bằng Python, PHP, React.js, Node.js, Java, C#, v.v.

Làm thế nào để

Bộ sưu tập lớn các đoạn mã cho HTML, CSS và JavaScript

Khung CSS

Xây dựng các trang web nhanh và phản hồi bằng cách sử dụng khung W3.CSS miễn phí của chúng tôi

Thống kê trình duyệt

Đọc xu hướng dài hạn của việc sử dụng trình duyệt

Tốc độ gõ

Kiểm tra tốc độ đánh máy của bạn

Đào tạo AWS

Tìm hiểu dịch vụ web của Amazon

Bộ chọn màu

Sử dụng công cụ chọn màu của chúng tôi để tìm các màu RGB, HEX và HSL khác nhau. Bánh xe màu hình tròn thể hiện sự chuyển màu trong quang phổ

Trò chơi mã

Trò chơi mã hóa W3Schools! Giúp linh miêu thu thập nón thông Logo Lynx

Đặt mục tiêu

Nhận hành trình học tập được cá nhân hóa dựa trên các kỹ năng và mục tiêu hiện tại của bạn

Bản tin

Tham gia bản tin của chúng tôi và có quyền truy cập vào nội dung độc quyền mỗi tháng

Việc làm

Thuê những tài năng công nghệ hàng đầu. Hợp lý hóa quy trình tuyển dụng của bạn để có đội ngũ phù hợp hoàn hảo

Lớp học

Hãy liên hệ để sử dụng Example.com.vn Plus và các chứng chỉ với tư cách là một tổ chức giáo dục

×
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP CÁCH W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS AN NINH MẠNG DỮ LIỆU KHOA HỌC

Tấn công ứng dụng web an ninh mạng


Ngày nay, các ứng dụng web có ở khắp mọi nơi và chúng được sử dụng để kiểm soát mọi thứ bạn có thể tưởng tượng. Trong phần này chúng ta sẽ xem xét các cuộc tấn công và bảo mật ứng dụng web.


IDOR ("Tham chiếu đối tượng trực tiếp không an toàn")

Lỗ hổng IDOR xảy ra khi nhà phát triển chưa thực hiện các yêu cầu ủy quyền để truy cập tài nguyên.

IDOR

Eve, chỉ cần thay đổi một mã định danh, ví dụ như tham số Rest của tài liệu, cô ấy có thể truy cập các tài liệu của Alice.

Điều này xảy ra khi ứng dụng web không thực thi ủy quyền giữa các đối tượng, cho phép kẻ tấn công liệt kê các giá trị và kiểm tra quyền truy cập vào các điểm dữ liệu khác.

Ví dụ: chúng ta có thể có mã giả sau không có dấu hiệu ủy quyền:

$id = getInputFromUser();
$doc = getDocument($id);
return $doc;

Đoạn mã trên yêu cầu người dùng nhập thông tin đầu vào, không thực hiện xác thực hoặc dọn dẹp, sau đó thực hiện tra cứu trực tiếp bằng hàm getDocument và trả về tài liệu được đề cập.

Việc triển khai tốt hơn sẽ là kiểm tra các đặc quyền:

$id = getInputFromUser();
$user = findUsername();
$doc = "";
if (hasAccessToDocument($user, $id)) {
  $doc = getDocument($id);
} else {
  $doc = "Not authorized for this document";
}
return $doc;

Những lỗ hổng như thế này rất dễ tìm thấy vì bạn chỉ cần thay đổi một con số đơn giản và xem liệu bạn có quyền truy cập vào dữ liệu của người khác hay không. Việc kiểm tra xem người dùng có được ủy quyền hay không trước tiên sẽ ngăn chặn lỗ hổng này.

Lưu ý : Mã giả đơn giản có nghĩa là mã giống với mã thật nhưng có thể không thực sự hoạt động. Nó được sử dụng để làm ví dụ về mã thực tế.

Tránh “Những con số kỳ diệu”

Một ứng dụng muốn tránh sử dụng dãy số khi tham chiếu dữ liệu. Trong ví dụ về IDOR, tài liệu có số nhận dạng từ 1000 đến 1002. Đôi khi những con số này được gọi là "Số ma thuật" vì chúng trỏ trực tiếp đến tài nguyên trên máy chủ, ví dụ: thông qua cơ sở dữ liệu và tất cả các giá trị có thể dễ dàng được liệt kê. Ví dụ: kẻ tấn công có thể kiểm tra tất cả các số nhận dạng tài liệu từ 0 đến 10000 và ghi lại mọi kết quả cung cấp quyền truy cập vào dữ liệu.

Mặc dù việc ủy ​​quyền phải được triển khai đúng cách nhưng cũng hữu ích khi sử dụng GUID ("Mã định danh duy nhất toàn cầu") hoặc UUID ("Mã định danh duy nhất toàn cầu") khi tham chiếu dữ liệu. Các mã định danh này được thiết kế để có tính duy nhất trên toàn cầu và không thể liệt kê được do entropy tích hợp trong quá trình tạo số.

GUID có thể trông như thế này:

  • 3377d5a6-236e-4d68-be9c-e91b22afd216
Lưu ý: Nếu nhìn vào cơ sở toán học đằng sau việc đoán số ở trên, chúng ta sẽ nhanh chóng thấy rằng việc liệt kê không hề dễ dàng. Việc liệt kê là một kỹ thuật có thể được sử dụng để xem qua tất cả các tùy chọn có thể có của một giá trị, GUID hoặc UUID ngăn chặn điều này.

Tiêm SQL

Nhiều ứng dụng web được kết nối với cơ sở dữ liệu. Cơ sở dữ liệu chứa tất cả thông tin mà ứng dụng web muốn lưu trữ và sử dụng.

SQL Tiêm là một kỹ thuật cho phép kẻ tấn công thao túng SQL ("Ngôn ngữ truy vấn có cấu trúc") mà nhà phát triển ứng dụng web đang sử dụng. Điều này thường xảy ra do thiếu vệ sinh dữ liệu. SQL được các nhà phát triển sử dụng thường xuyên để truy cập tài nguyên cơ sở dữ liệu.

Trong yêu cầu mà Eve đưa ra trong hình trên, chúng ta thấy cô ấy nhập giá trị: 1000' OR '1'='1

Điều này khiến cho Truy vấn SQL thu được trả về tất cả các hàng của bảng vì cơ sở dữ liệu đánh giá câu lệnh là luôn đúng. Hãy suy nghĩ về điều này: cơ sở dữ liệu nhận được yêu cầu trong đó giá trị có thể là 1000 HOẶC 1 bằng 1; nó sẽ trả về một giá trị mỗi lần! Có nhiều hàm và thao tác SQL khác nhau mà chúng ta có thể sử dụng để thao tác cú pháp và ví dụ này chỉ là một trong số rất nhiều ví dụ.

Dưới đây là một ví dụ về mã giả có chứa lỗ hổng SQL Insert.

$username = getUserName();
$pw = getPassword();
$user = mysql_query("SELECT * FROM userTable WHERE username = $username AND password = $pw");
if ($user) {
  $loggedIn = True;
} else {
  $loggedIn = False;
}
Chúng ta có thể thấy không có sự dọn dẹp nào đối với cả biến tên người dùng và mật khẩu; thay vào đó chúng được sử dụng trực tiếp trong SQL khiến lỗ hổng xảy ra. Mã này cho phép đặt biến $loggedIn nếu truy vấn trả về bất cứ thứ gì.

Để kẻ tấn công khai thác điều này, chúng có thể chỉ cần tạo một URL chống lại miền mục tiêu có chứa cuộc tấn công như thế này:

/login?username=admin&password=password' OR '1'='1

Biến mật khẩu được đặt để chứa các ký tự SQL, khiến chuỗi SQL kết quả trả về một hàng, ngay cả khi chúng tôi không xác định được mật khẩu. Truy vấn SQL kết quả sẽ là:

SELECT * FROM userTable WHERE username = 'admin' AND password = 'password' OR '1'='1'

Truy vấn được tham số hóa là giải pháp được đề xuất để đánh bại việc tiêm SQL. Trong truy vấn được tham số hóa, nhà phát triển phải đảm bảo cẩn thận mỗi đầu vào của truy vấn được xác định là một giá trị và loại cụ thể. Đây là một ví dụ từ đoạn mã trên được coi là cách triển khai an toàn:

$username = getUserName();
$pw = getPassword();
$parameterizedQuery = prepare_query("SELECT * FROM userTable where username = ? and password = ?");
$parameterizedQuery.setString(1, $username)
$parameterizedQuery.setString(2, $password)
$user = parameterizedQuery.execute();
if ($user) {
    $loggedIn = True;
} else {
    $loggedIn = False;
}

Trong ví dụ trên, nhà phát triển đã cẩn thận nói rằng tham số 1 phải là một chuỗi và chứa tên người dùng cũng như mật khẩu trong tham số thứ hai.

Lưu ý: Việc tiêm SQL có thể thực hiện được vì các nhà phát triển không sàng lọc cẩn thận dữ liệu đầu vào từ người dùng và do đó cho phép kẻ tấn công đánh lừa ứng dụng và cơ sở dữ liệu chạy mã SQL trái phép.

XSS ("Kịch bản chéo trang")

XSS sử dụng máy chủ để tấn công khách truy cập máy chủ. Cuộc tấn công không nhắm vào chính máy chủ mà thay vào đó là người dùng.

Máy chủ chỉ được sử dụng để phản ánh các giá trị của kẻ tấn công, thường là JavaScript, chống lại những khách truy cập sau đó chạy dữ liệu của kẻ tấn công trong trình duyệt của riêng họ. Kẻ tấn công phải tạo đầu vào mà máy chủ không dọn dẹp và vệ sinh, theo cách đó khi khách truy cập nhấp vào liên kết chứa các giá trị của kẻ tấn công hoặc truy cập tài nguyên trên trang web mà kẻ tấn công đã sử dụng trong cuộc tấn công của chúng, người dùng sẽ chạy mã. kẻ tấn công đã cung cấp.

Đây là một ví dụ đồ họa về việc Eve gửi một liên kết tới Alice có chứa cuộc tấn công XSS:

XSS

Cuộc tấn công này được gọi là XSS phản ánh và yêu cầu Eve tìm ra lỗ hổng, sau đó gửi liên kết chứa cuộc tấn công đến người dùng không nghi ngờ và yêu cầu họ nhấp vào liên kết. Liên kết chứa cuộc tấn công và khiến máy chủ web trả lại cuộc tấn công cho nạn nhân nhấp vào liên kết.

Mã đằng sau điều này có thể đơn giản như ví dụ về mã giả này:

$nickname = etNickName();
echo "Greeting $nickname, nice to meet you!";

Một loại XSS khác được gọi là tấn công Stored XSS. Trong các cuộc tấn công Stored XSS, kẻ tấn công có khả năng lưu nội dung trên trang web, nội dung này được phản ánh mỗi khi ai đó truy cập trang web. Nó không nhất thiết phải yêu cầu ai đó nhấp vào một liên kết.

Đồ họa này mô tả cách Eve có thể lưu trữ JavaScript độc hại để thực thi trong trình duyệt của bất kỳ ai khi truy cập tài nguyên:

XSS được lưu trữ

Các cuộc tấn công XSS có thể thực hiện được nhiều việc, ví dụ:

  • Ăn cắp cookie có thể được sử dụng để xác thực
  • Làm biến dạng trang web, hiển thị nội dung mà máy chủ web không có ý định làm
  • Lừa đảo người dùng để lại thông tin xác thực trong các biểu mẫu đăng nhập giả mạo

Để bảo vệ chống lại XSS, có một số phương pháp hay nhất cần tuân theo:

  • Cho phép máy chủ web trả về các tiêu đề CSP ("Chính sách bảo mật nội dung") quyết định nghiêm ngặt vị trí và cách thức thực thi JavaScript từ đó
  • Mã hóa an toàn đầu ra mà máy chủ web trả về cho người dùng, biến các ký tự HTML thành các ký tự an toàn được mã hóa một cách hiệu quả

Mã hóa HTML

Mã hóa HTML cho phép ứng dụng web trả về các ký tự không an toàn thông thường một cách an toàn. Ví dụ: các ký tự đặc biệt sau có thể được mã hóa thành bản sao tương ứng của chúng:

Special Character HTML Entity
< &lt;
> &gt;
" &quot;
& &amp;
' &apos;

Điều này tạo ra đầu ra có thể được hiển thị một cách an toàn. Sau đó, chúng tôi có thể sử dụng JavaScript ở phía máy khách để biến các thực thể HTML thành giá trị một cách an toàn.


CSP ("Chính sách bảo mật nội dung")

Máy chủ web có thể kiểm soát loại JavaScript nào được phép chạy trên trang web. Điều này không loại bỏ các lỗ hổng nhưng bổ sung thêm khả năng bảo vệ chuyên sâu khi có một lỗ hổng chưa xác định.

Một CSP phổ biến và nghiêm ngặt là cung cấp cho người dùng ứng dụng web danh sách tất cả các tệp nguồn JavaScript được chấp nhận.

Ngoài ra, thông thường CSP sẽ ngăn chặn việc thực thi JavaScript nội tuyến.

Để cho phép triển khai và phát hiện các cuộc tấn công đang diễn ra dễ dàng hơn, CSP cho phép khách hàng báo cáo các vi phạm CSP tới một URL do máy chủ cung cấp


Quét ứng dụng web

Có rất nhiều máy quét ứng dụng web trên mạng. Điều này cho phép các ứng dụng được quét để tìm các lỗ hổng như SQL Tiêm và XSS. Trái ngược với trình quét lỗ hổng mạng, trình quét ứng dụng web thường được xây dựng dựa trên phương pháp phỏng đoán thay vì chữ ký và danh sách các lỗ hổng đã biết.

Trình quét ứng dụng web rất hữu ích, đặc biệt khi được tích hợp vào các quy trình phát triển như CI ("Tích hợp liên tục") và CD ("Phân phối liên tục")



×

Liên hệ bán hàng

Nếu bạn muốn sử dụng dịch vụ của Example.com.vn với tư cách là một tổ chức giáo dục, nhóm hoặc doanh nghiệp, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Báo cáo lỗi

Nếu bạn muốn báo cáo lỗi hoặc nếu bạn muốn đưa ra đề xuất, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Example.com.vn được tối ưu hóa cho việc học tập và đào tạo. Các ví dụ có thể được đơn giản hóa để cải thiện khả năng đọc và học. Các hướng dẫn, tài liệu tham khảo và ví dụ liên tục được xem xét để tránh sai sót, nhưng chúng tôi không thể đảm bảo tính chính xác hoàn toàn của mọi nội dung. Khi sử dụng W3Schools, bạn đồng ý đã đọc và chấp nhận các điều khoản sử dụng , chính sách cookie và quyền riêng tư của chúng tôi.

Bản quyền 1999-2024 của Refsnes Data. Đã đăng ký Bản quyền. Example.com.vn được cung cấp bởi W3.CSS .