Làm cách nào để khử trùng php?

Tôi đã chỉ cho bạn cách làm sạch và xác thực các trường biểu mẫu bằng cách sử dụng PHP vì nó đã trở thành một trong những khía cạnh quan trọng của bảo mật. Hy vọng bạn thích nó. Hãy tiếp tục theo dõi chúng tôi để tìm hiểu thêm và cung cấp cho chúng tôi phản hồi của bạn trong không gian nhất định bên dưới. 🙂

Làm sạch và xác thực đầu vào của người dùng là một trong những tác vụ phổ biến nhất trong ứng dụng web. Để làm cho nhiệm vụ này dễ dàng hơn, PHP cung cấp tiện ích mở rộng bộ lọc gốc mà bạn có thể sử dụng để làm sạch hoặc xác thực dữ liệu như địa chỉ email, URL, địa chỉ IP, v.v.

Để xác thực dữ liệu bằng tiện ích mở rộng bộ lọc, bạn cần sử dụng hàm filter_var[] của PHP. Cú pháp cơ bản của chức năng này có thể được đưa ra với

filter_var[biến, bộ lọc, tùy chọn]

Hàm này lấy ba tham số trong đó hai tham số cuối cùng là tùy chọn. Tham số đầu tiên là giá trị cần lọc, tham số thứ hai là ID của bộ lọc sẽ áp dụng và tham số thứ ba là mảng các tùy chọn liên quan đến bộ lọc. Hãy xem nó hoạt động như thế nào

Vệ sinh chuỗi

Ví dụ sau sẽ làm sạch một chuỗi bằng cách xóa tất cả các thẻ HTML khỏi chuỗi đó

Hey there! How are you doing today?";
 
// Sanitize and print comment string
$sanitizedComment = filter_var[$comment, FILTER_SANITIZE_STRING];
echo $sanitizedComment;
?>

Đầu ra của ví dụ trên sẽ giống như thế này

chào bạn. Làm thế nào bạn làm gì hôm nay?

Xác thực giá trị số nguyên

Ví dụ sau sẽ xác thực xem giá trị được cung cấp có phải là số nguyên hay không, cũng như liệu nó có nằm trong phạm vi từ 0 đến 100 hay không

Gần đây, tôi nhận ra rằng ngay cả ở những nơi được coi là hàng đầu và có nhiều sự cạnh tranh giữa các công ty công nghệ và doanh nghiệp như London, vẫn có rất nhiều công ty sử dụng phiên bản PHP thứ năm hoặc trước đó và thậm chí còn tệ hơn.

Đối lưu nên được sử dụng hàng ngày như vệ sinh đầu vào, xác thực dữ liệu hoặc thoát đầu ra bị bỏ qua vì những lý do như. “Không có thời gian, hôm nay tôi cần phải triển khai, nếu không sếp sẽ đẩy tôi”

Từ việc bỏ qua kiểm tra dữ liệu bên ngoài đến việc không quản lý mật khẩu và ngày tháng cho đến quyết định không xử lý lỗi và ngoại lệ, tất cả những điều này đều dẫn đến mã xấu và ứng dụng không an toàn

Nhưng hôm nay, bạn sẽ thấy cách làm việc với dữ liệu và tại sao dữ liệu lại quan trọng

Trong thực tế,

bài đăng này chứa các phương pháp hay và một số lời khuyên có thể được sử dụng hàng ngày trong tất cả các dự án mà bạn hiện đang thực hiện

Nếu bạn tuân theo các thông lệ tốt, bạn sẽ đảm bảo rằng các ứng dụng của mình chạy nhanh hơn, ổn định hơn và chúng sẽ thực sự khó bị phá vỡ vì chúng chạy theo cách an toàn hơn

PHP với tư cách là một ngôn ngữ đã tồn tại hơn 20 năm và nó đã có nhiều lần viết lại và phát triển đồng nghĩa với việc tất cả các công cụ đã được tạo, cập nhật và không dùng nữa được tạo ra để có những công cụ lỗi thời từ quá khứ và rất dễ bị lỗi

Một lời khuyên hữu ích mà tôi đã có vài năm trước là biết nên sử dụng công cụ nào và bỏ qua công cụ nào

Cách PHP để viết các thực hành tốt

David Duchovny trong vai Fox William Mulder một nhân vật hư cấu trong loạt phim truyền hình khoa học viễn tưởng-siêu nhiên mang tên The X-Files từng nói câu “không tin ai cả”.

 

Là một nhà phát triển PHP, bạn cần luôn ghi nhớ triết lý này

Bạn không biết ai là khách truy cập vào các trang web của mình và tệ hơn nữa, bạn không biết ý định của họ là gì

Một cách để duy trì quyền kiểm soát ứng dụng của chúng tôi là thêm các lớp bảo vệ bổ sung cho ứng dụng của chúng tôi bằng cách kiểm tra và hạn chế quyền truy cập vào các nguồn bên ngoài của chúng tôi

Nguồn bên ngoài điển hình có thể là

  • $_POST
  • $_GET
  • $_REQUEST
  • $_COOKIE
  • file_get_contents[]
  • cơ sở dữ liệu
  • API
  • Dữ liệu đầu vào từ khách hàng
  • $argv
  • php. //stdin
  • php. //đầu vào

Tất cả các từ khóa ở trên có thể là tài nguyên mà kẻ xấu có thể sử dụng để đưa dữ liệu độc hại vào tập lệnh của bạn

Nếu bạn đang sử dụng bất kỳ một trong những từ khóa này trong ứng dụng của mình, bạn nên lên lịch một thời gian trong tuần để làm sạch đầu vào, xác thực dữ liệu của bạn và thoát khỏi đầu vào

Trong các đoạn sau, tôi sẽ dạy bạn cách làm điều đó

 

Vệ sinh đầu vào

Từ Từ điển chính thức của Cambridge

/ˈsanɪtʌɪz/ - làm cho thứ gì đó hoàn toàn sạch sẽ và không có vi khuẩn

Trong quá trình phát triển web, để vệ sinh có nghĩa là bạn xóa các ký tự không an toàn khỏi đầu vào

Đây là tuyến phòng thủ đầu tiên của bạn,

Điều cơ bản là bạn phải làm sạch đầu vào mà ứng dụng của chúng tôi nhận được trước khi nó đến lớp lưu trữ [cho dù bạn đang sử dụng cơ sở dữ liệu MySql hay NoSql hay sử dụng các ứng dụng bộ đệm như Redis]

Như chúng tôi đã nói trước đây, chúng tôi cần giả định rằng thế giới là một nơi nguy hiểm, điều đó có nghĩa là chúng tôi cần đảm bảo rằng nếu một kẻ xấu truy cập trang của chúng tôi thì người đó sẽ không thể làm bất cứ điều gì nguy hiểm hoặc tiêm một số dữ liệu xấu

Có một số loại đầu vào bạn cần xem xét khi vệ sinh, phổ biến nhất là HTML, đầu vào thông qua truy vấn SQL và thông tin hồ sơ người dùng

Hãy cùng xem xét cả ba trường hợp và chúng ta có thể làm gì để giải quyết những vấn đề này

Nhập thông qua HTML

Hãy tưởng tượng bạn có một blog,

blog của bạn cho phép nhận xét và, một anh chàng ngẫu nhiên nào đó trên web, sau khi đọc bài đăng trên blog của bạn, quyết định nhập nhận xét bao gồm đoạn mã một dòng JavaScript rất cơ bản,

Điều gì đó . địa điểm. lệnh href.

Kết quả của việc này là bất cứ lúc nào ai đó [sau khi bạn của chúng ta để lại món quà] nhấp vào bài đăng trên trang của chúng ta, người đó sẽ được chuyển hướng đến những trang mà kẻ tấn công đã quyết định gửi cho họ.

Một cách để giải quyết nó là sử dụng lệnh PHP htmlentities[]

Hàm này thoát tất cả các ký tự HTML trong một chuỗi và hiển thị chuỗi an toàn

Vấn đề với htmlentities[] là nó không mạnh lắm, trên thực tế, nó không thoát khỏi dấu ngoặc đơn, không thể phát hiện bộ ký tự và cũng không xác thực HTML

Để giải quyết vấn đề này, chúng ta cần học cách sử dụng tốt nhất các lập luận của nó.

Đối số đầu tiên mà hàm này chấp nhận là chuỗi chúng ta cần làm sạch [duh?]

Cái thứ hai phải bao gồm một lá cờ, trong trường hợp của chúng tôi, chúng tôi muốn sử dụng hằng số  ENT_QUOTES,

Nó nhắc hàm mã hóa dấu nháy đơn

Cuối cùng, đối số cuối cùng cho phép bạn chỉ định bộ ký tự bạn đang sử dụng trong ứng dụng của mình

Một ví dụ cơ bản sẽ như thế này

echo htmlentities[$string, ENT_QUOTES, 'UTF-8'];

Một công cụ mà bạn có thể sử dụng để làm sạch HTML của mình sâu hơn được gọi là Bộ lọc HTML

Đó là một thư viện,

nó chấp nhận một loạt các tham số mà bạn có thể đặt trước và nó được coi là rất đáng tin cậy

Điều cuối cùng tôi muốn nói về chủ đề này là đừng sử dụng các hàm biểu thức chính quy để khử trùng, chúng rất phức tạp và nguy cơ mắc lỗi rất cao

Tránh preg_replace[], preg_replace_all[], preg_replace_callback[]

 

truy vấn SQL

Đôi khi, chúng tôi, với tư cách là nhà phát triển, cần xây dựng các truy vấn SQL theo thông tin đầu vào mà người dùng cung cấp cho chúng tôi

Đầu vào này có thể đến từ một chuỗi truy vấn [ví dụ:. ?user=1] hoặc một URI [ví dụ:. người dùng/1]

Nếu bạn không cẩn thận với đầu vào này và cho phép chúng được chèn trực tiếp vào truy vấn, điều đó có thể rất nguy hiểm cho ứng dụng của bạn

Hãy làm một ví dụ cơ bản

$changePassword = sprintf[
    'UPDATE users set password = "%s" WHERE id = "%s"',
    $_POST['password'],
    $_GET['id'],
];

Có gì sai với mã này?

Đừng quên quy tắc n. 1 “không tin ai”

Mức độ bảo vệ của mã này rất yếu, thực tế là nó không tồn tại

Điều gì sẽ xảy ra nếu ai đó gửi yêu cầu HTTP tới tập lệnh PHP của bạn?

Cái gì đó như

POST /user?id=1
password="abc";--

Nhiều cơ sở dữ liệu SQL coi -- là phần đầu của nhận xét khiến văn bản theo sau bị bỏ qua

Kết quả?

Bạn sẽ đặt tất cả mật khẩu của người dùng thành abc

Bạn có thể làm gì để giải quyết vấn đề?

Sử dụng câu lệnh chuẩn bị PDO

PDO là một lớp trừu tượng cơ sở dữ liệu

Nó được tích hợp vào PHP và cung cấp giao diện cho phép sử dụng một số cơ sở dữ liệu

PDO làm sạch và nhúng dữ liệu bên ngoài vào truy vấn SQL theo cách an toàn và tránh các loại sự cố tôi đã trình bày ở trên

 

Thông tin người dùng

Phần lớn ứng dụng web hiện có trên web sử dụng một loại hệ thống kế toán nào đó, hãy suy nghĩ về điều đó một chút, mạng xã hội mà bạn chọn, một tờ báo trực tuyến lọc tin tức phù hợp hơn với tài khoản của bạn hoặc tài khoản Netflix của bạn sẽ

Rất có thể tất cả các tài khoản này đều có địa chỉ email, số điện thoại, vị trí của bạn, v.v.

Các nhà phát triển của PHP lõi đã thực hiện một công việc tuyệt vời khi thấy trước những tình huống này và cung cấp cho chúng tôi hai chức năng

Cái đầu tiên là filter_var[] cái thứ hai là filter_input[]

Hai chức năng này làm sạch các đầu vào bằng cách sử dụng một loạt các cờ

Một ví dụ rất dễ hiểu là khi bạn cần dọn dẹp email

$email = 'myname@gmail.com';
$emailSanitized = filter_var[$email, FILTER_SANITIZE_EMAIL];

Chức năng này, khi sử dụng cờ trong ví dụ, đảm bảo rằng mã xóa tất cả các ký tự ngoại trừ chữ cái, chữ số và các ký tự sau. #$%&'*+-=?_`{. }~@. [].  

Có sẵn một số cờ trong số này, để biết danh sách đầy đủ, hãy xem trang bộ lọc vệ sinh trong sách hướng dẫn chính thức

 

Xác thực dữ liệu

Từ Từ điển chính thức Cambridge

 /ˈvæl. ɪ. deɪt/ - để làm cho một cái gì đó được chính thức chấp nhận hoặc phê duyệt, đặc biệt là sau khi kiểm tra nó

Bạn đã làm sạch đầu vào, xóa tất cả thông tin mà bạn không muốn sử dụng và loại bỏ tất cả dữ liệu mà bạn cho là nguy hiểm

Bây giờ là lúc để xác thực dữ liệu

Quá trình xác thực không phải là quá trình làm sạch, bước này không xóa bất kỳ dữ liệu xấu nào, quá trình xác thực xác nhận rằng thông tin đến với ứng dụng của bạn đáp ứng các tiêu chí bạn muốn

Nếu bạn đang đợi một giá trị văn bản, hãy tiếp tục với ví dụ về email,  bạn cần đảm bảo rằng ứng dụng của bạn sẽ nhận được một chuỗi chứa email, giống nhau về ngày và số

Nếu bước này bị bỏ qua, nó có thể dẫn đến một số lỗi trong các bước tiếp theo và nhiều sự cố hơn trong giai đoạn nâng cao hơn trong hành trình của người dùng của bạn

Có nhiều phương thức khác nhau để xác thực đầu vào nhưng chức năng chính được sử dụng để xác thực một lần nữa là filter_var[]

Chúng tôi đã thấy cách sử dụng một cờ chẳng hạn như FILTER_SANITIZE_EMAIL ký tự không được hỗ trợ trên email sẽ bị xóa,

Bây giờ chúng ta có thể sử dụng chức năng này với cờ tương tự FILTER_VALIDATE_EMAIL

Hàm này trả về một biến có hai loại khác nhau tùy trường hợp

Nếu xác thực thành công, nó sẽ trả về giá trị chính nó, trong trường hợp ngược lại, nó sẽ trả về false

Vì lý do này, bạn cần '. = false' để kiểm tra kết quả của hàm này

Theo chức năng khử trùng, phần lớn nếu không phải tất cả các cờ đều bắt đầu bằng chuỗi FILTER_VALIDATE_* và kết thúc bằng loại xác thực mà chúng tôi cần sử dụng,

Chúng tôi có thể xác thực số nguyên, số float, địa chỉ IP, tên miền, URL, v.v.

Tra cứu trang bộ lọc xác thực để biết thêm

Lưu ý rằng, ngay cả khi filter_var[] cung cấp một số cờ xác thực, vẫn có các thành phần mạnh hơn nhiều, chẳng hạn như

  • hào quang/bộ lọc
  • tôn trọng/xác nhận
  • symfony/trình xác thực

 

Đầu ra thoát

Từ Từ điển Chính thức Cambridge

/ɪˈskeɪp/ - thoát khỏi điều gì đó, hoặc tránh điều gì đó

Chúng tôi đã nhận được một số dữ liệu, chúng tôi đã xác thực dữ liệu đó bằng các kỹ thuật bạn vừa học, bây giờ là lúc nghĩ về cách đảm bảo an toàn cho giai đoạn hiển thị của dữ liệu này

Chúng tôi có thể thêm một lớp bảo vệ khác vào ứng dụng của mình bằng cách thoát khỏi thông tin mà chúng tôi muốn hiển thị và loại trừ một số mã được hiển thị và thậm chí tệ hơn là được thực thi trên các trang của chúng tôi

Để thoát đầu ra, chúng tôi sử dụng hàm PHP htmlentities[]

Chúng ta cần đảm bảo rằng tham số thứ hai của hàm này bao gồm cờ ENT_QUOTES để nó thoát khỏi dấu ngoặc đơn và dấu ngoặc kép, đồng thời xác định mã hóa ký tự [ở Châu Âu và Hoa Kỳ, nó thường là UTF-8]

Chú ý không thoát dữ liệu nhiều lần, chỉ thoát khi nhận được hoặc khi cần kết xuất

Đây là một ví dụ

$script = '

cảnh báo ["Đây là tin nhắn"];

';

echo  htmlentities[$script, ENT_QUOTES, 'UTF-8'];

Theo xác thực dữ liệu, có một số thành phần có thể được sử dụng ngay cả trong giai đoạn thoát

Liên quan nhất là

  • cành cây/ cành cây
  • thông minh/thông minh

Sự kết luận

Có thể quản lý dữ liệu đúng cách, xác thực dữ liệu, hiển thị dữ liệu theo cách an toàn và đáng tin cậy, đồng thời làm cho ứng dụng web của bạn trở nên đáng tin cậy phải là một trong những mục tiêu chính của bạn ngay từ khi bắt đầu sự nghiệp với tư cách là nhà phát triển web

Có một số phương pháp hay khác như học cách sử dụng mật khẩu đúng cách hoặc sử dụng ngày và giờ hoặc thậm chí quản lý tiện ích mở rộng PDO

[chúng tôi cũng sẽ xem xét điều đó, vì vậy hãy nhớ đăng ký nhận bản tin bên dưới].  

Tất cả những quy ước này có vẻ nhàm chán và lãng phí thời gian nhưng về lâu dài lợi ích của việc sử dụng chúng sẽ trở nên rõ ràng

Làm cách nào để khử trùng mã PHP?

Làm sạch dữ liệu = Xóa mọi ký tự không hợp lệ khỏi dữ liệu. .
Phần mở rộng bộ lọc PHP. Các bộ lọc PHP được sử dụng để xác thực và làm sạch đầu vào bên ngoài. .
Tại sao sử dụng bộ lọc?.
PHP hàm filter_var[]. .
Vệ sinh chuỗi. .
Xác thực một số nguyên. .
Xác thực địa chỉ IP. .
Vệ sinh và xác thực địa chỉ email. .
Vệ sinh và xác thực một URL

Bạn nên sử dụng cái nào để làm sạch một địa chỉ PHP?

The Phần mở rộng bộ lọc PHP . Các bộ lọc PHP được sử dụng để khử trùng và xác thực đầu vào bên ngoài. Tiện ích mở rộng bộ lọc PHP có nhiều chức năng cần thiết để kiểm tra đầu vào của người dùng và được thiết kế để thực hiện vệ sinh dữ liệu dễ dàng và nhanh hơn.

Làm cách nào để khử trùng và xác thực trong PHP?

php // Url trang web mẫu $url = "http. //www. thí dụ. com"; // Xóa tất cả các ký tự không hợp lệ khỏi url $sanitizedUrl = filter_var[$url, FILTER_SANITIZE_URL]; // Xác thực url trang web if[$url == $sanitizedUrl && filter_var[$url, . ...

Làm cách nào để khử trùng các trường đầu vào trong PHP?

Trong tập lệnh php này hàm lọc filter_var[] được sử dụng để khử trùng và xác thực . Ở đây chúng tôi có một biểu mẫu HTML với ba trường đầu vào cụ thể là. tên, email và trang web. Khi người dùng điền tất cả thông tin và nhấp vào nút gửi, tất cả các trường nhập sẽ được làm sạch và xác thực bằng các bộ lọc.

Chủ Đề