Vệ sinh mật khẩu php

Tôi biết dữ liệu nên được bảo vệ khi nó được xuất ra hoặc hiển thị, không phải khi nó được nhận hoặc lưu trữ. Đây là những gì tôi đang làm bây giờ

echo htmlspecialchars($name, ENT_QUOTES);

Nếu tôi sẽ nhận được các tham số $ _GET và kiểm tra cơ sở dữ liệu cho chúng tôi, tôi có còn bảo vệ sinh và thoát không?

$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();

Vì vậy

$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
4 có cần thiết hay tôi chỉ nên làm
$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
5?

Vệ sinh mật khẩu php

Pháp sư ♦♦

28. 1K21 Huy hiệu vàng75 Huy hiệu bạc127 Huy hiệu đồng21 huy hiệu vàng75 huy hiệu bạc127 huy hiệu đồng21 huy hiệu vàng75 huy hiệu bạc127

Đã hỏi ngày 8 tháng 2 năm 2019 lúc 0. 06ngày 8 tháng 2 năm 2019 tại 0. 06 8 tháng 2 năm 2019 lúc 0. 06

2

PDO làm cho nó thậm chí còn dễ dàng hơn bạn đã làm

$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->execute([ 'name' => $_GET['name'] ]);

That is it. xong

Điều quan trọng là bạn không thoát khỏi mọi thứ khi sử dụng các giá trị giữ chỗ, đặc biệt là khi kết hợp

$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
4 chỉ có liên quan trong bối cảnh HTML, bên ngoài nó gây thiệt hại. Nếu bạn đang hiển thị dữ liệu trong JSON, trong một email hoặc bất kỳ nơi nào, chỉ cần thoát khỏi cảnh đó và cảnh đó. không thoát khỏi mọi thứ khi sử dụng các giá trị giữ chỗ, đặc biệt là khi thực hiện khớp.
$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
4 chỉ liên quan trong ngữ cảnh HTML, bên ngoài nó sẽ gây ra thiệt hại. Nếu bạn đang hiển thị dữ liệu ở dạng JSON, trong email hoặc ở bất kỳ đâu, hãy thoát khỏi ngữ cảnh đó và chỉ ngữ cảnh đó. không thoát khỏi mọi thứ khi sử dụng các giá trị giữ chỗ, đặc biệt là khi thực hiện khớp.
$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
4 chỉ liên quan trong ngữ cảnh HTML, bên ngoài nó sẽ gây ra thiệt hại. Nếu bạn đang hiển thị dữ liệu ở dạng JSON, trong email hoặc ở bất kỳ đâu, hãy thoát khỏi ngữ cảnh đó và chỉ ngữ cảnh đó

Nếu ai đó có một cái tên như "A & W" thì khi bạn tìm kiếm, bạn sẽ xử lý đầu vào và thực sự tìm kiếm "A & W", đó không phải là tên của họ. Họ sẽ nhận được các trận đấu bằng không và sau đó họ sẽ hỏi bạn điều gì sai với trang web của bạn

Điều duy nhất bạn nên làm với dữ liệu đầu tiên là cắt bỏ bất kỳ ký tự nào có thể truy cập vào công việc tìm kiếm phù hợp, chẳng hạn như không gian dẫn đầu và dấu vết mà ai đó có thể đã vô tình giới thiệu

Đã trả lời ngày 8 tháng 2 năm 2019 lúc 0. 29 Tháng 2 8, 2019 tại 0. 29 8 tháng 2 năm 2019 lúc 0. 29

Tadmantadmantadman tadman

203K22 Huy hiệu vàng230 Huy hiệu bạc255 Huy hiệu Đồng22 huy hiệu vàng230 huy hiệu bạc255 huy hiệu đồng22 huy hiệu vàng230 huy hiệu bạc255 bronze badges

Không sử dụng được

$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
8.
$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
9 thực hiện tất cả công việc thoát và trích dẫn mà bạn cần

PHP có một dãy lối thoát khó hiểu -

  • URLENCODE - Khi xây dựng một giá trị cho một URL
  • HTML ENTITY, HTMLSPECIALCHAR ACTERS - cho
    $stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
    $stmt->execute([ 'name' => $_GET['name'] ]);
    
    0, ____10,
    $name = htmlspecialchars($_GET['name'], ENT_QUOTES);
    $stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
    $stmt->bindParam(':name', $name);
    $stmt->execute();
    
    1 - only exit
    $name = htmlspecialchars($_GET['name'], ENT_QUOTES);
    $stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
    $stmt->bindParam(':name', $name);
    $stmt->execute();
    
    2
  • NL2BR (or
    $name = htmlspecialchars($_GET['name'], ENT_QUOTES);
    $stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
    $stmt->bindParam(':name', $name);
    $stmt->execute();
    
    3) - để xử lý các kết thúc dòng
  • MySQL_REAL_ESCAPE_STRING - Không sử dụng các thói quen
    $name = htmlspecialchars($_GET['name'], ENT_QUOTES);
    $stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
    $stmt->bindParam(':name', $name);
    $stmt->execute();
    
    4
  • MySQLI_REAL_ESCAPE_STRING - Khi thoát theo thói quen
    $name = htmlspecialchars($_GET['name'], ENT_QUOTES);
    $stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
    $stmt->bindParam(':name', $name);
    $stmt->execute();
    
    5 - ít nhất
    $name = htmlspecialchars($_GET['name'], ENT_QUOTES);
    $stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
    $stmt->bindParam(':name', $name);
    $stmt->execute();
    
    6
  • AddSlashes - near as good as on
  • Hex, base64_encode - Kludges may be to argument with not text

Những gì thường tốt nhất khi lưu trữ văn bản vào bảng MySQL, chỉ là thoát khỏi chuỗi đủ để vượt qua trình phân tích cú pháp. Điều này thoát biến mất khi quá trình xử lý xảy ra. To back the character have dấu hiệu, v.v.

  • Dấu nháy đơn và trích dẫn kép - những điều này cho thấy phần cuối của chuỗi, vì vậy bạn cần phải thoát khỏi chúng bằng cách nào đó
  • Dấu gạch chéo ngược - Escaper System. Nhưng điều gì sẽ xảy ra nếu bạn muốn một gạch chéo ngược thì sao?

PDO of PHP and MySQLI has way "ràng buộc" thực hiện tất cả công việc cho bạn. Nếu, thay vào đó, bạn sử dụng "nội suy" của PHP, chẳng hạn như

$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
7

Bạn không thoát được và không có bảo vệ tiêm SQL. Không viết mã theo cách đó ngoại trừ khi bạn đã sử dụng cách nào đó đã kiểm tra Args

Đối với HTML, bạn cần một bộ Escapers khác. Hãy suy nghĩ về

$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
7. Điều này giới thiệu một thẻ. Go to make anythế nào để bạn hiển thị một "ít hơn"? .
$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
8. Điều đó sau đó dẫn đến
$name = htmlspecialchars($_GET['name'], ENT_QUOTES);
$stmt = $db->prepare("SELECT * FROM users WHERE name = :name");
$stmt->bindParam(':name', $name);
$stmt->execute();
9 là một vấn đề;

Đã trả lời ngày 8 tháng 2 năm 2019 lúc 0. 31 Tháng 2 8, 2019 tại 0. 31 8 tháng 2 năm 2019 lúc 0. 31

Rick Jamesrick JamesRick James Rick James

Huy hiệu vàng 128K1111 huy hiệu vàng 122 huy hiệu bạc 205 huy hiệu đồng11 huy hiệu vàng122 huy hiệu bạc205 huy hiệu đồng

1

Vì vậy, htmlspecialchars có cần thiết hay tôi chỉ nên làm $ name = $ _get ['name']?

Không, nó không cần thiết

Giữ nguyên đầu dữ liệu vào như là, bất khả tri đến phương tiện đầu ra. Nó không nên được chuẩn bị cho việc nhúng HTML một cách an toàn

Điều gì sẽ xảy ra nếu ngày mai bạn cần dữ liệu này ở định dạng JSON cho một số API, PDF hoặc ứng dụng máy tính để bàn?

Đã trả lời ngày 8 tháng 2 năm 2019 lúc 10. 15 Tháng 2 8, 2019 tại 10. 15 8 tháng 2 năm 2019 lúc 10. 15

MarcodormarcodorMarcodor Marcodor

3. 52018 Huy hiệu bạc22 Huy hiệu đồng18 huy hiệu bạc22 huy hiệu đồng18 huy hiệu bạc22 huy hiệu đồng

You are going to verify the start to the target item, ví dụ:. chắc chắn rằng đầu vào ít nhiều là những gì bạn mong đợi vì sự ổn định của ứng dụng. Tuy nhiên, vì bạn đang sử dụng các câu lệnh đã chuẩn bị sẵn, nên bạn không có bất kỳ nhu cầu cấp thiết nào cho "vệ sinh" [hay còn gọi là "tham nhũng"] dữ liệu của bạn vì nó đang được điều chỉnh