Vệ sinh đầu vào php MySQL

Là một nhà phát triển ứng dụng Web, có một sự thật không vui mà bạn sẽ phải học cách sống chung với nó. sẽ luôn có những người cười khúc khích khi tìm ra kẽ hở trong mã của bạn và khai thác những kẽ hở này cho mục đích xấu

Hầu hết thời gian, những cách khai thác này bao gồm việc gửi đầu vào được ngụy trang khéo léo cho ứng dụng của bạn để "lừa" nó làm một việc mà nó thực sự, thực sự không nên làm. Một ví dụ phổ biến của kiểu khai thác này là "tấn công SQL injection", trong đó kẻ tấn công thao túng cơ sở dữ liệu của bạn từ xa bằng một truy vấn SQL được nhúng bên trong đầu vào biểu mẫu. Do đó, một trong những điều quan trọng nhất mà nhà phát triển phải làm trước khi sử dụng bất kỳ đầu vào nào do người dùng cung cấp, là "khử trùng" đầu vào đó bằng cách xóa mọi ký tự hoặc biểu tượng đặc biệt khỏi đầu vào đó.

Theo cách tương tự, nếu ứng dụng của bạn sẽ sử dụng dữ liệu được lấy từ các nguồn từ xa, thì cần phải luôn "làm sạch" dữ liệu này trước khi hiển thị cho người dùng. Việc không thực hiện điều này có thể cho phép những kẻ tấn công nhúng nội dung độc hại vào các trang Web của bạn mà bạn không biết. Một ví dụ phổ biến của kiểu khai thác này là "tấn công kịch bản chéo trang", trong đó kẻ tấn công có thể truy cập vào dữ liệu nhạy cảm của người dùng bằng cách đưa mã JavaScript độc hại hoặc mã biểu mẫu HTML vào các trang Web của bạn. Với suy nghĩ này, điều cần thiết là luôn chuyển đầu ra thông qua quy trình vệ sinh trước khi cung cấp cho người dùng

May mắn thay, PHP đi kèm với nhiều chức năng khác nhau để hỗ trợ các nhà phát triển trong hai nhiệm vụ là làm sạch đầu vào và đầu ra. Đây là một danh sách ngắn gọn

Hàm addlashes[] thoát các ký tự đặc biệt [như dấu ngoặc kép và dấu gạch chéo ngược] trong đầu vào để có thể nhập vào cơ sở dữ liệu một cách an toàn. Ngoài ra, hãy sử dụng phương thức real_escape_string[] của MySQLi để khử trùng đầu vào trước khi chèn nó vào cơ sở dữ liệu MySQL hoặc hàm sqlite_escape_string[] trên đầu vào dành cho cơ sở dữ liệu SQLite

Hàm strip_tags[] cho phép các nhà phát triển loại bỏ tất cả các thẻ HTML và PHP ra khỏi một chuỗi, chỉ trả về nội dung ASCII. Điều này có thể hữu ích để xóa mã độc tiềm ẩn khỏi cả dữ liệu đầu vào và dữ liệu từ xa của người dùng

Hàm htmlentities[] đảm nhiệm việc thay thế các ký tự đặc biệt như ", &, < và > bằng các giá trị thực thể HTML tương ứng của chúng. Bằng cách dịch các ký tự đặc biệt này và ngăn không cho máy khách hiểu chúng thành mã HTML, chức năng này rất hữu ích để "làm mờ" dữ liệu và khiến nó không thể ảnh hưởng đến hiển thị hoặc chức năng của trang Web

Đây là một ví dụ về việc sử dụng phương thức real_escape_string[] và hàm strip_tag[] để khử chuyển đổi đầu vào của người dùng trước khi lưu vào cơ sở dữ liệu MySQL

// thử kết nối cơ sở dữ liệu

$mysqli = new mysqli["localhost", "user", "pass", "music"];

chết ["LỖI. Không thể kết nối. ". mysqli_connect_error[]];

// thoát các giá trị đầu vào if [isset[$_POST['artist']] &&. trống[$_POST['artist']]] { $artist = $mysqli->real_escape_string[htmlspecialchars[$_

nếu [isset[$_POST['country']] &&. trống[$_POST['country']]] { $country = $mysqli->real_escape_string[htmlspecialchars[$_

// thử thực hiện truy vấn // thêm bản ghi mới

// đầu ra. "Nghệ sĩ mới với id. 7 đã thêm. "

$sql = "CHÈN VÀO nghệ sĩ [artist_name, artist_country]

GIÁ TRỊ ['$artist', '$country']"; if [$mysqli->query[$sql] === true] {

echo 'Nghệ sĩ mới có id. '. $mysqli->insert_id. ' thêm. ';

lặp lại "LỖI. Không thể thực hiện truy vấn. $sql. ". $mysqli->lỗi;

// đóng kết nối

Và đây là một ví dụ về làm sạch đầu vào biểu mẫu với hàm htmlentities[]

// định nghĩa mảng dữ liệu đã khử trùng $sanitized = array[];

// loại bỏ các thẻ khỏi đầu vào POST if [isset[$_POST['name']] &&. trống[$_POST['name']]] { $sanitized['name'] = htmlentities[$_POST['name']];

Cuối cùng, đây là một ví dụ về khử trùng đầu ra có khả năng gây nguy hiểm trước khi hiển thị cho người dùng

// định nghĩa mảng dữ liệu đã khử trùng $sanitized = array[];

// lấy dữ liệu từ xa

$out = 'Hedocument.location.href=

"http. //đi. một vài nơi. xấu. com/";llo';

// chuyển đổi tất cả các ký tự đặc biệt thành các thực thể // trước khi sử dụng nó

lặp lại $out;

Ngoài việc làm sạch đầu vào, điều quan trọng là phải đảm bảo rằng ứng dụng của bạn không vô tình cho phép người dùng xem hoặc thao tác với các tệp hoặc cơ sở dữ liệu riêng tư của nó. Các phần sau thảo luận về một số kỹ thuật bạn có thể sử dụng để bảo vệ quyền truy cập vào tệp cấu hình và các nguồn dữ liệu khác

Trừ khi bạn định cấu hình rõ ràng máy chủ Web của mình để từ chối quyền truy cập vào một số loại tệp nhất định, bất kỳ tệp nào nằm trong thư mục gốc tài liệu của máy chủ đều có thể được truy cập bởi người dùng từ xa. Điều này làm cho các ứng dụng Web thường lưu trữ các tệp cấu hình của chúng cùng với phần còn lại của mã ứng dụng dưới gốc tài liệu của máy chủ, đặc biệt dễ bị truy cập từ xa trái phép.

Một cách dễ dàng để bịt lỗ hổng bảo mật này là luôn lưu trữ dữ liệu cấu hình nhạy cảm bên ngoài thư mục gốc của tài liệu máy chủ Web và đọc dữ liệu đó vào ứng dụng của bạn khi cần thông qua lệnh gọi yêu cầu [] hoặc bao gồm []. Vì cả hai chức năng này đều chấp nhận đường dẫn hệ thống tệp [chứ không phải HTTP], nên chúng có thể nhập tệp từ các thư mục không phải là một phần của thư mục gốc tài liệu của máy chủ, do đó khiến kẻ tấn công khó truy cập dữ liệu cấu hình hơn

Đây là một ví dụ về cách điều này có thể được thực hiện

// gốc tài liệu máy chủ là. /var/www/html/ // tập tin cấu hình được lưu trữ trong. /var/www/ứng dụng/conf/

// tập lệnh của bạn có thể đọc đường dẫn này include_once '/var/www/apps/conf/myapp. conf'; . //máy chủ cục bộ/. /ứng dụng/conf/myapp. conf'];

Làm cách nào tôi có thể làm sạch đầu vào của người dùng bằng PHP?

Các phương pháp làm sạch đầu vào của người dùng bằng PHP. .
Sử dụng các phiên bản hiện đại của MySQL và PHP
Đặt bộ ký tự một cách rõ ràng. $mysqli->set_charset["utf8"]; .
Sử dụng bộ ký tự an toàn. .
Sử dụng chức năng không gian. .
Kiểm tra biến chứa những gì bạn đang mong đợi

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

Việc định dạng ngày sẽ làm sạch nó, bởi vì. .
Nếu trình định dạng thành công, thì đó sẽ chỉ là một ngày, với cú pháp được kiểm soát bởi chuỗi định dạng
Nếu nó không thành công, thì FALSE được trả về

Việc vệ sinh có bắt buộc trong PHP không?

Vì vậy, để bảo vệ cơ sở dữ liệu khỏi tin tặc, cần phải vệ sinh và lọc dữ liệu do người dùng nhập trước khi gửi vào cơ sở dữ liệu .

Bạn có nên vệ sinh đầu vào của người dùng?

Khử trùng và xác thực đầu vào thường là lớp bảo vệ đầu tiên . Sanitizing bao gồm xóa bất kỳ ký tự không an toàn nào khỏi đầu vào của người dùng và xác thực sẽ kiểm tra xem dữ liệu có ở định dạng và loại dự kiến ​​hay không. Những kẻ tấn công đã sử dụng các lỗ hổng cổ điển trong nhiều năm với tỷ lệ thành công khá cao.

Chủ Đề