Hướng dẫn how to secure _post data in php - cách bảo mật dữ liệu _post trong php

Tôi có câu hỏi này liên quan đến bảo mật của dữ liệu được đăng vào ứng dụng của tôi. Tôi có một mã trong đó tôi bắt được tất cả dữ liệu $ _POST và $ _GET từ máy khách và đặt chúng vào mảng của đối tượng. Đối tượng này sau đó được truyền đến các chức năng nơi tôi cần truy cập một số loại dữ liệu nhất định (nhận, bài đăng, phiên, một số cấu hình, v.v.).

Tôi bắt tất cả các bài viết và nhận được phần này của mã:

foreach ($_GET as $key => $value)   // STORE $_GET VALUES
        {
            $this->_get[$key] = $value;
        }

        foreach ($_POST as $key => $value)  // STORE $_POST VALUES
        {
            $this->_post[$key]  = $value;
        }

        foreach ($_SESSION as $key => $value)   // STORE $_SESSION VALUES
        {
            $this->_session[$key] = $value;
        }

        $this->_config = $config;

        unset($config); // CLEAR $CONFIG VALUES 

        unset($_GET, $_POST /*, $_SESSION */ ); // CLEAR $_GET, $_POST FOR SECURITY ISSUES

Ở cuối tệp ứng dụng đó, sau đó tôi đảo ngược $ này-> _ phiên trở lại $ _Session, như thế này:

foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }

Làm thế nào tôi có thể trốn thoát hoặc làm một cái gì đó khác với GetS và bài đăng để chúng có thể được "sử dụng" an toàn "một cách an toàn. Đôi khi tôi đang sử dụng điều này để truy cập cơ sở dữ liệu hoặc ghi dữ liệu vào cơ sở dữ liệu, nhưng tôi không chắc nó có an toàn không.

Bất kì lời đề nghị nào?

Bài đăng này cũng có sẵn trong các ngôn ngữ sau: Bồ Đào Nha.

Trong bài viết này, chúng tôi sẽ đề cập đến hai phương thức yêu cầu: các phương thức GET và POST, để gửi và nhận dữ liệu từ biểu mẫu HTML bằng PHP. Ngoài ra, chúng tôi sẽ kiểm tra các vấn đề phổ biến nhất liên quan đến bảo mật thông tin, chẳng hạn như kịch bản chéo trang (XSS) và tiêm SQL, và cách giải quyết chúng với sự khử trùng đầy đủ.

Hãy bắt đầu với lý thuyết: những gì nhận được và đăng yêu cầu, và chúng khác nhau như thế nào? - Nếu bạn muốn, bạn có thể bỏ qua phần tiếp theo, nơi chúng tôi sẽ bắt đầu với việc thực hành.

Hiểu các phương pháp GET và POST

Giao thức chuyển siêu văn bản (HTTP) được phát triển như một giao thức để phục vụ việc truyền tài liệu và hoạt động như một trung gian giữa các trình duyệt Internet và máy chủ web. Bạn đã quen với việc đọc nó trong các địa chỉ của các trang web - cũng như anh em của nó, HTTPS, một phiên bản được mã hóa an toàn hơn (do đó là S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S).

Nói cách khác, HTTP là một giao thức phục vụ như một cây cầu trên mạng: nó thu thập một yêu cầu từ trình duyệt Internet; gửi nó đến máy chủ; chờ đợi một câu trả lời; Và cuối cùng, nó trả lại thông tin mới cho trình duyệt.

Nói chung, các yêu cầu này giữ một số siêu dữ liệu trong tiêu đề của họ, có chứa các thông báo được sử dụng để thực hiện một số hành vi nhất định trên máy khách hoặc trên máy chủ. Ngoài ra, các yêu cầu HTTP có thể giả sử các mô hình khác nhau.

Các loại yêu cầu HTTP được sử dụng nhiều nhất là nhận và đăng, nhưng có các loại khác trong đặc tả kỹ thuật của chúng, chẳng hạn như PUT, HEAD, DELETE,

foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
0 và
foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
1. Đối với các mục đích của bài viết này, chúng tôi sẽ chỉ tập trung vào hai phổ biến nhất.

Yêu cầu nhận

Phương thức Get yêu cầu được sử dụng khi bạn muốn lấy dữ liệu từ một nguồn hoặc tài nguyên cụ thể. Nó chỉ nên được sử dụng để truy xuất dữ liệu, vì chuỗi truy vấn của nó được gửi và hiển thị tại URL, ví dụ:

foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
2.

Khi chúng tôi chèn URL này vào trình duyệt, chúng tôi đang yêu cầu máy chủ YouTube cho một tài nguyên cụ thể: để lấy dữ liệu từ video

foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
3 được xác định là
foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
4. Ngay khi máy chủ trả về yêu cầu, giao thức HTTP sẽ cho trình duyệt biết cách hiển thị video, trong ví dụ này, video chính thức cho bài hát Boh Bohemian Rhapsody, bởi ban nhạc của Nữ hoàng Anh.

Lưu ý rằng trong ví dụ của chúng tôi, tham số thứ hai của yêu cầu GET, tham số

foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
5, thông báo thời gian bắt đầu mà chúng tôi mong đợi trong phản hồi của chúng tôi, trong trường hợp này, từ 3 phút và 5S. Các tham số
foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
3 và
foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
5 được phân tách bằng ký tự
foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
8, chỉ ra giao thức HTTP trong đó các cặp giá trị khóa-khóa của các tham số này bắt đầu và kết thúc. Vì vậy, máy chủ biết chính xác rằng bạn tìm kiếm video
foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
9 tại thời điểm
POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
0.

Nhận các yêu cầu thường bị giới hạn về chiều dài - đối với hầu hết các trình duyệt, nó lên tới 8 kb hoặc 8192 byte trong URI - và vì chúng chỉ phục vụ để yêu cầu dữ liệu, chúng không thể sửa đổi nó. Ngoài ra, chúng có thể được lưu trữ trong bộ đệm, trong lịch sử của trình duyệt và cả trong các dấu trang. Đó là lý do tại sao bạn không bao giờ nên sử dụng nó để gửi dữ liệu nhạy cảm, chẳng hạn như số an sinh xã hội và mật khẩu người dùng.never use it to send sensitive data, such as Social Security Numbers and user passwords.

Tuy nhiên, một số nhà phát triển bỏ qua nó và phơi bày dữ liệu cá nhân và nhạy cảm của mọi người trên internet. Ở Brazil, do Luật bảo vệ dữ liệu cá nhân chung (LGPD), thực tiễn này có thể gây ra những bất tiện lớn, chẳng hạn như các hình phạt nghiêm trọng đối với công ty hoặc đối với những người vận hành và quản lý dữ liệu này, khi xảy ra rò rỉ. Vì vậy, thực tiễn tốt nhất là không bao giờ gửi dữ liệu cá nhân nhạy cảm thông qua phương thức GET.never send sensitive personal data via the GET method.

Yêu cầu bài viết

Phương thức yêu cầu POST được sử dụng để gửi dữ liệu đến máy chủ, để cập nhật hoặc tạo tài nguyên mới.

Không giống như phương thức GET, phương thức POST không hiển thị thông tin tại địa chỉ URL. Trong trường hợp này, dữ liệu được truyền trong thân yêu cầu HTTP, như sau:

POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ

Trong ví dụ này, chúng tôi đang thông báo cho máy chủ

POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
1 rằng chúng tôi sẽ thực hiện yêu cầu phương thức
POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
2 đến địa chỉ
POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
3, sử dụng các thông số kỹ thuật của giao thức
POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
4. Chúng tôi cũng chỉ ra rằng có 42 thông tin ký tự (
POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
5), theo định dạng nội dung
POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
6 tiêu chuẩn, có giá trị là
POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
7. Cuối cùng, thông tin của chúng tôi nằm ở dòng dưới cùng, chứa 3 tham số:
POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
8,
POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
9 và
foreach ($in->_session as $key => $value)   // STORE $_SESSION VALUES
    {
        $_SESSION[$key] = $value;
    }
3.

Thông tin di chuyển trong phần thân của yêu cầu HTTP có thể bị chặn bởi các tác nhân xấu. Sau đó, thực tiễn tốt nhất là thực hiện các lần truyền này bằng cách sử dụng mã hóa, thông qua giao thức HTTPS, do đó, việc họ đọc thông tin này khó khăn hơn.

Giả sử máy chủ YouTube đã nhận ra yêu cầu của chúng tôi và địa chỉ này là hợp lệ. Trong ví dụ của chúng tôi, video được thông báo mà chúng tôi nhận được trước đó, sẽ được thêm vào danh sách phát

<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
1 của người dùng được xác định là
<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
2.

Lưu ý rằng đây là một yêu cầu một lần, không có khả năng được lặp lại. Theo quy định, phương thức POST, không giống như GET, không được lưu trữ trong bộ đệm hoặc trong lịch sử trình duyệt của khách hàng, cũng như không thể lưu trong các dấu trang. Các yêu cầu POST không có hạn chế về kích thước của tin nhắn, cho phép chúng tôi gửi các bài viết hoàn chỉnh, chẳng hạn như bài viết này, thông qua mẫu HTML điện tử chẳng hạn. Ngoài ra, phương pháp POST hỗ trợ nhiều loại

POST /update/webform.php HTTP/1.1
Host: youtube.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
user=Stevie&playlist=British&v=fJ9rUzIMcZQ
6, bao gồm các tài liệu nhị phân, chuỗi và số.

Phương pháp bài thường được ưa thích hơn get. Tuy nhiên, có những tình huống trong đó chúng tôi nên bao gồm dữ liệu yêu cầu trong URL địa chỉ: ví dụ: trong các biểu mẫu tìm kiếm hoặc bằng cách hiển thị tài liệu và video, vì chúng tôi muốn khách hàng có thể lặp lại nó dễ dàng và truy cập lại địa chỉ thông qua lịch sử của trình duyệt.

Tạo các biểu mẫu với HTML và PHP

Bây giờ chúng tôi đã hiểu cách các phương thức GET và POST hoạt động trong lý thuyết, chúng ta hãy đi đến các thực tiễn: Hãy tạo biểu mẫu HTML và để gửi và nhận thông tin bằng PHP.

Có một số cách để làm điều này, như thông qua JavaScript và Ajax, nơi người dùng không phải làm mới trang, vì chúng tôi đang truyền thông tin không đồng bộ. Đối với các mục đích của bài viết này, chúng tôi sẽ chỉ tập trung vào các công nghệ HTML và PHP.

Chèn biểu mẫu trên trang

Bước đầu tiên để tạo trang web của chúng tôi là thông báo cấu trúc của phần tử

<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
4 sẽ chứa các trường nơi người dùng nhập dữ liệu, như thế này:

<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>

Trong đoạn này, chúng tôi đang sử dụng phương thức GET, được xác định trong

<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
5, để gửi thông tin sẽ được chèn vào biểu mẫu, tên được xác định trong
<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
6, đến trang đích (
<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
7).

Chèn các trường vào biểu mẫu

Bước tiếp theo là chèn các trường hoặc

<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
8 vào biểu mẫu của chúng tôi, nơi người dùng có thể nhập các giá trị. Hãy cập nhật tệp nguồn của chúng tôi như thế này:

<!-- origin.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Electronic form</title>
</head>
<body>
    <form method="GET" id="webform" name="webform" action="target.php">
        <label for="iduser">User ID:</label>
        <input type="text" id="iduser" name="iduser"> <br />

        <label for="idplaylist">Playlist ID:</label>
        <input type="text" id="idplaylist" name="idplaylist"> <br />

        <label for="v">Video ID:</label>
        <input type="text" id="v" name="v" value="fJ9rUzIMcZQ"> <br />

        <button type="submit">Send data</button>
    </form>
</body>
</html>

Chúng tôi đã chèn 3 trường, được xác định bởi thẻ HTML

<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
9 và cũng là 1 nút gửi dữ liệu của biểu mẫu, sử dụng
<!-- origin.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Electronic form</title>
</head>
<body>
    <form method="GET" id="webform" name="webform" action="target.php">
        <label for="iduser">User ID:</label>
        <input type="text" id="iduser" name="iduser"> <br />

        <label for="idplaylist">Playlist ID:</label>
        <input type="text" id="idplaylist" name="idplaylist"> <br />

        <label for="v">Video ID:</label>
        <input type="text" id="v" name="v" value="fJ9rUzIMcZQ"> <br />

        <button type="submit">Send data</button>
    </form>
</body>
</html>
0.

Chúng tôi cũng thêm nhãn vào các trường văn bản, sử dụng các thẻ

<!-- origin.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Electronic form</title>
</head>
<body>
    <form method="GET" id="webform" name="webform" action="target.php">
        <label for="iduser">User ID:</label>
        <input type="text" id="iduser" name="iduser"> <br />

        <label for="idplaylist">Playlist ID:</label>
        <input type="text" id="idplaylist" name="idplaylist"> <br />

        <label for="v">Video ID:</label>
        <input type="text" id="v" name="v" value="fJ9rUzIMcZQ"> <br />

        <button type="submit">Send data</button>
    </form>
</body>
</html>
1. Lưu ý rằng mỗi giá trị trên các thuộc tính
<!-- origin.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Electronic form</title>
</head>
<body>
    <form method="GET" id="webform" name="webform" action="target.php">
        <label for="iduser">User ID:</label>
        <input type="text" id="iduser" name="iduser"> <br />

        <label for="idplaylist">Playlist ID:</label>
        <input type="text" id="idplaylist" name="idplaylist"> <br />

        <label for="v">Video ID:</label>
        <input type="text" id="v" name="v" value="fJ9rUzIMcZQ"> <br />

        <button type="submit">Send data</button>
    </form>
</body>
</html>
2, trên mỗi phần tử
<!-- origin.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Electronic form</title>
</head>
<body>
    <form method="GET" id="webform" name="webform" action="target.php">
        <label for="iduser">User ID:</label>
        <input type="text" id="iduser" name="iduser"> <br />

        <label for="idplaylist">Playlist ID:</label>
        <input type="text" id="idplaylist" name="idplaylist"> <br />

        <label for="v">Video ID:</label>
        <input type="text" id="v" name="v" value="fJ9rUzIMcZQ"> <br />

        <button type="submit">Send data</button>
    </form>
</body>
</html>
3 tương ứng với thuộc tính
<!-- origin.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Electronic form</title>
</head>
<body>
    <form method="GET" id="webform" name="webform" action="target.php">
        <label for="iduser">User ID:</label>
        <input type="text" id="iduser" name="iduser"> <br />

        <label for="idplaylist">Playlist ID:</label>
        <input type="text" id="idplaylist" name="idplaylist"> <br />

        <label for="v">Video ID:</label>
        <input type="text" id="v" name="v" value="fJ9rUzIMcZQ"> <br />

        <button type="submit">Send data</button>
    </form>
</body>
</html>
4 của một trường
<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
8, như thế này:
<!-- origin.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Electronic form</title>
</head>
<body>
    <form method="GET" id="webform" name="webform" action="target.php">
        <label for="iduser">User ID:</label>
        <input type="text" id="iduser" name="iduser"> <br />

        <label for="idplaylist">Playlist ID:</label>
        <input type="text" id="idplaylist" name="idplaylist"> <br />

        <label for="v">Video ID:</label>
        <input type="text" id="v" name="v" value="fJ9rUzIMcZQ"> <br />

        <button type="submit">Send data</button>
    </form>
</body>
</html>
6 đề cập cụ thể đến trường chứa thuộc tính
<!-- origin.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Electronic form</title>
</head>
<body>
    <form method="GET" id="webform" name="webform" action="target.php">
        <label for="iduser">User ID:</label>
        <input type="text" id="iduser" name="iduser"> <br />

        <label for="idplaylist">Playlist ID:</label>
        <input type="text" id="idplaylist" name="idplaylist"> <br />

        <label for="v">Video ID:</label>
        <input type="text" id="v" name="v" value="fJ9rUzIMcZQ"> <br />

        <button type="submit">Send data</button>
    </form>
</body>
</html>
7 tương ứng và ngược lại.

Có thể chèn các giá trị được xác định trước vào các trường, thêm dữ liệu tương ứng với thuộc tính

<!-- origin.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Electronic form</title>
</head>
<body>
    <form method="GET" id="webform" name="webform" action="target.php">
        <label for="iduser">User ID:</label>
        <input type="text" id="iduser" name="iduser"> <br />

        <label for="idplaylist">Playlist ID:</label>
        <input type="text" id="idplaylist" name="idplaylist"> <br />

        <label for="v">Video ID:</label>
        <input type="text" id="v" name="v" value="fJ9rUzIMcZQ"> <br />

        <button type="submit">Send data</button>
    </form>
</body>
</html>
8 trong mỗi phần tử HTML
<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
9.

Cuối cùng, thuộc tính

<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . $_GET["iduser"] . " added the video whose ID is " . $_GET["v"] . " to the playlist " . $_GET["idplaylist"] . "."
    );
?>
0 trong mỗi trường
<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
9 sẽ được sử dụng để có được các giá trị được người dùng chèn vào trường tương ứng khi chúng ta chuyển sang PHP.

Kết quả cuối cùng, được hiển thị trong trình duyệt của máy khách, sẽ trông như thế này:

Hướng dẫn how to secure _post data in php - cách bảo mật dữ liệu _post trong php

Đọc dữ liệu với PHP

Sau khi hoàn thành biểu mẫu HTML của chúng tôi, chúng tôi có thể chuyển sang bước tiếp theo. Hãy xác định các yếu tố của trang đích bằng PHP.

Mã nguồn bên dưới, được chèn vào tệp

<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . $_GET["iduser"] . " added the video whose ID is " . $_GET["v"] . " to the playlist " . $_GET["idplaylist"] . "."
    );
?>
2, sẽ được thực hiện bởi PHP ngay khi người dùng gửi dữ liệu biểu mẫu mà chúng tôi đã tạo trước đó.

<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . $_GET["iduser"] . " added the video whose ID is " . $_GET["v"] . " to the playlist " . $_GET["idplaylist"] . "."
    );
?>

Lưu ý rằng chúng tôi sử dụng biến SuperGlobal

<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . $_GET["iduser"] . " added the video whose ID is " . $_GET["v"] . " to the playlist " . $_GET["idplaylist"] . "."
    );
?>
3 để có được các giá trị được người dùng chèn vào, được truyền bằng giao thức HTTP. Đối với mỗi trường
<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
9 mà trước đây chúng tôi đã tạo trên biểu mẫu, thuộc tính
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . $_GET["iduser"] . " added the video whose ID is " . $_GET["v"] . " to the playlist " . $_GET["idplaylist"] . "."
    );
?>
0 tương ứng của nó phải được thông báo trong biến SuperGlobal. Ví dụ: trường
<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
9 hiển thị thuộc tính
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . $_GET["iduser"] . " added the video whose ID is " . $_GET["v"] . " to the playlist " . $_GET["idplaylist"] . "."
    );
?>
7 có thể được tìm thấy trong PHP bằng cách sử dụng
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . $_GET["iduser"] . " added the video whose ID is " . $_GET["v"] . " to the playlist " . $_GET["idplaylist"] . "."
    );
?>
8.

PHP có một số biến SuperGlobals bản địa, chẳng hạn như

<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . $_GET["iduser"] . " added the video whose ID is " . $_GET["v"] . " to the playlist " . $_GET["idplaylist"] . "."
    );
?>
9,
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . htmlspecialchars($_GET["iduser"], ENT_QUOTES, "UTF-8") . " added the video whose ID is " . htmlspecialchars($_GET["v"], ENT_QUOTES, "UTF-8") . " to the playlist " . htmlspecialchars($_GET["idplaylist"], ENT_QUOTES, "UTF-8") . "."
    );
?>
0 và
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . htmlspecialchars($_GET["iduser"], ENT_QUOTES, "UTF-8") . " added the video whose ID is " . htmlspecialchars($_GET["v"], ENT_QUOTES, "UTF-8") . " to the playlist " . htmlspecialchars($_GET["idplaylist"], ENT_QUOTES, "UTF-8") . "."
    );
?>
1. Hãy nhớ rằng chúng tôi sử dụng chúng theo phương thức yêu cầu HTTP mà chúng tôi đang sử dụng để truyền dữ liệu, do đó, nó phải tương ứng với những gì được xác định trong thuộc tính
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . htmlspecialchars($_GET["iduser"], ENT_QUOTES, "UTF-8") . " added the video whose ID is " . htmlspecialchars($_GET["v"], ENT_QUOTES, "UTF-8") . " to the playlist " . htmlspecialchars($_GET["idplaylist"], ENT_QUOTES, "UTF-8") . "."
    );
?>
2 của phần tử
<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
4 của chúng tôi.according to the HTTP request method that we are using for data transmission, so it must correspond to what been defined in the
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . htmlspecialchars($_GET["iduser"], ENT_QUOTES, "UTF-8") . " added the video whose ID is " . htmlspecialchars($_GET["v"], ENT_QUOTES, "UTF-8") . " to the playlist " . htmlspecialchars($_GET["idplaylist"], ENT_QUOTES, "UTF-8") . "."
    );
?>
2 attribute of our
<!-- origin.html -->
<form method="GET" id="webform" name="webform" action="target.php">
</form>
4 element.

Biến Superglobal

<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . htmlspecialchars($_GET["iduser"], ENT_QUOTES, "UTF-8") . " added the video whose ID is " . htmlspecialchars($_GET["v"], ENT_QUOTES, "UTF-8") . " to the playlist " . htmlspecialchars($_GET["idplaylist"], ENT_QUOTES, "UTF-8") . "."
    );
?>
1 của Php có thể mang thông tin từ cả hai phương pháp
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . $_GET["iduser"] . " added the video whose ID is " . $_GET["v"] . " to the playlist " . $_GET["idplaylist"] . "."
    );
?>
9 và
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . htmlspecialchars($_GET["iduser"], ENT_QUOTES, "UTF-8") . " added the video whose ID is " . htmlspecialchars($_GET["v"], ENT_QUOTES, "UTF-8") . " to the playlist " . htmlspecialchars($_GET["idplaylist"], ENT_QUOTES, "UTF-8") . "."
    );
?>
0, ngoài bất kỳ cookie nào được truyền trong
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . htmlspecialchars($_GET["iduser"], ENT_QUOTES, "UTF-8") . " added the video whose ID is " . htmlspecialchars($_GET["v"], ENT_QUOTES, "UTF-8") . " to the playlist " . htmlspecialchars($_GET["idplaylist"], ENT_QUOTES, "UTF-8") . "."
    );
?>
7. Tuy nhiên, việc sử dụng nó không phải lúc nào cũng được khuyến nghị: Thực tiễn tốt nhất là các nhà phát triển biết các phương thức được sử dụng cho đầu vào và đầu ra di chuyển trên máy chủ của họ, để tránh các lệnh chung hơn.is not always recommended: the best practice is that developers know the methods used for inputs and outputs traveling on their server, in order to avoid more generic commands.

Sau đó, chúng tôi tách các chuỗi và các biến trong PHP với ký tự

<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . htmlspecialchars($_GET["iduser"], ENT_QUOTES, "UTF-8") . " added the video whose ID is " . htmlspecialchars($_GET["v"], ENT_QUOTES, "UTF-8") . " to the playlist " . htmlspecialchars($_GET["idplaylist"], ENT_QUOTES, "UTF-8") . "."
    );
?>
8, do đó, mỗi đoạn văn bản được chứa giữa các ký tự
<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . htmlspecialchars($_GET["iduser"], ENT_QUOTES, "UTF-8") . " added the video whose ID is " . htmlspecialchars($_GET["v"], ENT_QUOTES, "UTF-8") . " to the playlist " . htmlspecialchars($_GET["idplaylist"], ENT_QUOTES, "UTF-8") . "."
    );
?>
9, ở đầu và cuối câu. Cuối cùng, chúng tôi in trên màn hình của người dùng toàn bộ biểu thức trong dấu ngoặc đơn với hàm PUT0.

📝 Học bằng cách làm

Bạn có nhận thấy rằng địa chỉ URL trên trang

<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . $_GET["iduser"] . " added the video whose ID is " . $_GET["v"] . " to the playlist " . $_GET["idplaylist"] . "."
    );
?>
2 hiển thị các giá trị được nhập trong trang nguồn không?

Kiểm tra số 1: Viết lại mã nguồn của biểu mẫu chúng tôi đã mã hóa, bằng cách sử dụng một phương thức yêu cầu khác, để thông tin vẫn an toàn khỏi việc đọc của người nghe lén và những người trái phép. Sau khi bạn hoàn thành, bạn có thể kiểm tra câu trả lời cuối cùng. Rewrite the source code of the form we coded, using another requisition method, so that the information stays safe from reading by eavesdroppers and unauthorized people. After you finish, you can check the final answer.

Tăng bảo mật hình thức HTML

Hình thức HTML của chúng tôi cuối cùng đã được thực hiện! Tuy nhiên, chúng tôi có thể tăng tính bảo mật của trang của chúng tôi, bảo vệ việc đọc thông tin trên PHP.

Đây là bước cuối cùng của chúng tôi. Chúng tôi sẽ thêm một lớp bảo mật bổ sung, mặc dù cơ bản, để ngăn PHP thực thi các lệnh tại thời điểm nó nhận và hiển thị các giá trị được báo cáo bởi máy khách.

Quy tắc trong lập trình là không bao giờ tin tưởng một cách mù quáng các giá trị được người dùng chèn vào. Thật không may, nhiều tác nhân xấu đã khai thác các vấn đề kỹ thuật trên các trang web để thu thập thông tin nhạy cảm hoặc gây sát thương cho các máy chủ bằng cách thực hiện các lệnh bất ngờ. Vì những lý do đó, điều rất quan trọng là bạn bảo vệ, trước, các yêu cầu được truyền và máy chủ, nếu tất cả, nếu lợi ích của người dùng là hợp pháp, chúng cũng sẽ được hưởng lợi từ việc tăng cường bảo mật ứng dụng của bạn.never blindly trust the values inserted by the user. Unfortunately, many bad agents have exploited technical problems on websites in order to collect sensitive information, or to damage servers by executing unexpected commands. For those reasons, it is very important that you protect, beforehand, the transmitted requests and the server, after all, if the users' interests are legitimate, they will also benefit from the increased security of your application.

Kỹ thuật lọc và biến đổi các giá trị được người dùng nhập vào thành các chuỗi đơn giản hơn được gọi là vệ sinh. Theo mặc định, PHP có một tập hợp các chức năng gốc giúp chúng tôi ở bước này, chẳng hạn như sau:sanitization. By default, PHP has a collection of native functions that helps us on this step, such as the following:

  • PUT2 - Chuyển đổi các ký tự đặc biệt, chẳng hạn như PUT3, thành các thực thể HTML;
  • PUT4 - Tương tự như phần trước, nhưng nó chuyển đổi số lượng ký tự lớn hơn thành các thực thể HTML;
  • PUT5 - Xóa các thẻ HTML và PHP khỏi một chuỗi, chẳng hạn như siêu liên kết và nhận xét.

Khi chúng tôi sử dụng quá trình vệ sinh đầy đủ, ngay khi máy chủ nhận được thông tin không chính xác - ví dụ: PUT6 - nó sẽ được chuyển đổi, đã khử trùng, và không nên hiển thị thông báo cảnh báo trên màn hình của người dùng trong trường hợp này.

💡 Lưu ý rằng, trong ví dụ của chúng tôi, chúng tôi sử dụng một tập lệnh vô hại, theo lý thuyết - nhiều nhất, không thoải mái cho người dùng. Tuy nhiên, điều quan trọng là phải nhắc lại: bạn phải luôn bảo vệ và vệ sinh thông tin. Trong các trường hợp khác, một tác nhân xấu có thể truyền các tập lệnh độc hại-kỹ thuật này được gọi là kịch bản chéo trang hoặc XSS-hoặc thực hiện các lệnh có hại cho cơ sở dữ liệu (thường được gọi là tiêm SQL).always protect and sanitize information. In other cases, a bad agent could transmit malicious scripts — this technique is known as Cross-Site Scripting, or XSS — or execute harmful commands to the database (usually called SQL Injection).

Hãy chỉnh sửa mã nguồn của trang của chúng tôi, bằng cách thêm một trong các chức năng vệ sinh này. Mã cuối cùng của chúng tôi sẽ trông như thế này:

<!-- target.php -->
<?php
    // Prints the values of each field on the page
    echo(
    "The user identified as " . htmlspecialchars($_GET["iduser"], ENT_QUOTES, "UTF-8") . " added the video whose ID is " . htmlspecialchars($_GET["v"], ENT_QUOTES, "UTF-8") . " to the playlist " . htmlspecialchars($_GET["idplaylist"], ENT_QUOTES, "UTF-8") . "."
    );
?>

Kết quả cuối cùng, được hiển thị trong trình duyệt, sẽ trông giống như hình dưới đây:

Hướng dẫn how to secure _post data in php - cách bảo mật dữ liệu _post trong php

📝 Học bằng cách làm

Bạn đã bao giờ nhận thấy rằng phần lớn các trang web và công cụ tìm kiếm sử dụng tham số PUT7 để truyền dữ liệu được người dùng chèn vào các yêu cầu truy vấn đến máy chủ?

Kiểm tra số 2: Tạo biểu mẫu tìm kiếm, sử dụng HTML và PHP, chứa ít nhất 1 trường văn bản và 1 nút để gửi dữ liệu, để URL địa chỉ trên trang đích hiển thị tham số PUT7 (hoặc truy vấn trực tuyến). Nó sẽ nhận được các giá trị, được vệ sinh, được người dùng chèn vào trường văn bản. Sau khi bạn hoàn thành, bạn có thể kiểm tra câu trả lời cuối cùng. Create a search form, using HTML and PHP, that contains at least 1 text field and 1 button to send the data, so that the address URL on the target page displays the PUT7 (or “query”) parameter. It should receive the values, sanitized, inserted by the user in the text field. After you finish, you can check the final answer.

Sự kết luận

Vì vậy, chúng tôi đã hoàn thành! Chúng tôi đã thực hiện biểu mẫu điện tử của chúng tôi trong HTML có khả năng truyền dữ liệu qua các phương thức yêu cầu HTTP, trong trường hợp này, nhận hoặc đăng - và chúng tôi cũng hiểu cách chúng hoạt động - và gửi chúng đến trang đích được viết bằng PHP. Sau đó, nó nhận được, xử lý dữ liệu và hiển thị thông tin trên màn hình của người dùng. Ngoài ra, chúng tôi đã vệ sinh các giá trị được người dùng thông báo để tránh các vấn đề nghiêm trọng về bảo mật thông tin.

Các bước tiếp theo 🚶 🚶

Bảo mật Internet không bao giờ là quá nhiều, vì vậy luôn có một cái gì đó để học và áp dụng nhiều hơn. Để xây dựng các ứng dụng an toàn hơn, hãy chắc chắn theo dõi bài viết tiếp theo về loạt bài này và đọc chủ đề bảo mật trong hướng dẫn sử dụng PHP.

Nếu bạn có bất kỳ câu hỏi hoặc đề xuất nào về cách xây dựng các ứng dụng an toàn hơn bằng PHP, hãy chia sẻ nó trong các bình luận. 📣

Người giới thiệu

.

.

.

.

.

.

.

.

Phương pháp nào an toàn hơn khi gửi dữ liệu trong PHP?

HTML.Ưu điểm: Nó an toàn hơn là nhận vì thông tin nhập người dùng không bao giờ hiển thị trong chuỗi truy vấn URL hoặc trong nhật ký máy chủ.Có một giới hạn lớn hơn nhiều về lượng dữ liệu có thể được truyền và người ta có thể gửi dữ liệu văn bản cũng như dữ liệu nhị phân (tải lên tệp) bằng POST.. Advantages: It is more secure than GET because user-entered information is never visible in the URL query string or in the server logs. There is a much larger limit on the amount of data that can be passed and one can send text data as well as binary data (uploading a file) using POST.

Post có phải PHP an toàn không?

Bài đăng an toàn hơn là nhận được vì một vài lý do.Nhận tham số được truyền qua URL.Điều này có nghĩa là các tham số được lưu trữ trong nhật ký máy chủ và lịch sử trình duyệt. for a couple of reasons. GET parameters are passed via URL. This means that parameters are stored in server logs, and browser history.

Đầu vào PHP có an toàn không?

Nếu bạn làm một cái gì đó như EXEC (PHP: // Đầu vào) (psuedocode), bạn sẽ có một ngày tồi tệ.Nếu thay vào đó, bạn chỉ cần đọc luồng đầu vào và xử lý đúng dữ liệu bạn nhận được, bạn vẫn ổn.Không có gì an toàn hoặc không an toàn về luồng đầu vào.Đó là những gì bạn làm với nó quan trọng.There's nothing inherently secure or insecure about the input stream. It's what you do with it that matters.

Php Post làm gì?

PHP $ _POST là một biến siêu toàn cầu PHP được sử dụng để thu thập dữ liệu biểu mẫu sau khi gửi biểu mẫu HTML với Phương thức = "Post".collect form data after submitting an HTML form with method="post".