2010-06-07 30 views
7

Tôi đang thực hiện kiểm tra bảo mật trên một ứng dụng php khá lớn và đang tự hỏi mình nên bao gồm xác thực người dùng nhập vào của mình ở đâu.Chức năng hoặc người gọi có chịu trách nhiệm xác nhận đầu vào không?

Tôi có nên xác thực dữ liệu, sau đó gửi dữ liệu sạch đến các chức năng back-end hay tôi nên dựa vào từng chức năng để thực hiện xác nhận riêng của nó? Hoặc thậm chí cả hai?

Có bất kỳ tiêu chuẩn hoặc thực hành tốt nhất cho loại điều này không?

Hiện tại, ứng dụng này không nhất quán và tôi muốn làm cho mọi thứ nhất quán hơn.

+0

http://symcbean.blogspot.co.uk/2017/07/validate-input-escape-output.html – symcbean

Trả lời

6

Bạn chắc chắn nên xác thực dữ liệu từ bên ngoài càng sớm càng tốt. Tùy thuộc vào kiến ​​trúc, xác nhận phụ trợ bên trong các hàm có trách nhiệm có thể là bước thứ hai, nhưng không phụ thuộc vào xác thực phụ trợ nhưng xác thực dữ liệu khi nó đi vào ứng dụng của bạn. Các ưu điểm với việc xác thực các chức năng bên trong như một bổ sung cho việc xác nhận trước đó là dễ dàng hơn (và an toàn hơn) để duy trì hệ thống vì các nhà phát triển (sloppier) sau khi bạn không thể phá vỡ ứng dụng. Nếu bạn có một ứng dụng có hỗ trợ plugin, ví dụ: cho các plugin của bên thứ ba, các chức năng an toàn cũng phải là.

+0

Một vấn đề với điều này là khi ứng dụng khi nói đến ứng dụng của bạn là bạn có thể không biết biến được sử dụng như thế nào.Vì lý do này nói chung là tốt nhất để khử trùng ngay lập tức trước khi sử dụng, điều này cũng làm cho nó ** dễ dàng hơn nhiều ** cho đánh giá ngang hàng dựa trên bảo mật. – rook

2

Tôi nghĩ nếu bạn có thể làm cả hai và thời gian/tài nguyên không phải là vấn đề, tại sao lại không?

2

Tùy thuộc vào phạm vi/định nghĩa của ứng dụng. Nhưng theo truyền thống, các hàm của bạn được sử dụng ở những nơi có thể $ object-> doSomething() làm điều đó. Bằng cách dựa vào xác nhận trong đó, bạn ngăn chặn khả năng làm điều gì đó() của ACCCord OWN của bạn, bạn biết không?

Quá, nếu bạn tiếp tục xác thực bên ngoài, bạn có thể dễ dàng quản lý nó. Không cần phải săn lùng nó trong chức năng nội bộ cụ thể đó. Giữ nguyên trạng thái này, nhưng giống như

$ data = $ validator-> sanitizeSomething ($ data); $ object-> doSomething ($ data);

điều này giúp quy tắc xác thực của bạn riêng biệt và dễ dàng quản lý cũng như các chức năng nội bộ của bạn.

Xây dựng, nói rằng bạn có một đối tượng db có thêm một mảng để bàn:

class db { 
    function addRow($table, $associativeArray) { 
     // primitive i know, just an example 
    } 
} 

bạn muốn xác nhận của bạn trong đó?

function addRow($table, $associativeArray) { 
    if(isset($assiciativeArray['description']) { 
     // validate 
    } 
} 

sẽ là ngớ ngẩn - bạn muốn rằng trong đối tượng bạn đang làm việc trong

class product { 
    function update() { 
     if($this->validate()) { 
      $this->db->addRow($this->toArray()); // or something, you get the idea, ya? 
     } 
    } 
    function validate() { 
     if($this->description != "") { 
     return true; 
     } 
     return false; 
    } 
} 
8

Cả hai là câu trả lời tốt hơn. Việc xác thực dữ liệu sẽ xảy ra trong mọi chức năng sẽ xử lý dữ liệu để tránh vấn đề của Hope Driven Development (HDD)

+0

Tôi có sự thông cảm mạnh mẽ với quan điểm này! Nó thực sự là con đường đúng đắn để làm điều đó. Đây là nơi PHP trở thành một nhức đầu để làm việc với, bởi vì gõ yếu buộc bạn tạo ra kiểm tra của riêng bạn chỉ để đảm bảo tất cả các đối số chức năng là đúng loại = ( –

+0

Nhưng phải có một sự cân bằng.Nếu tôi làm cho một lớp học với Đó là một lớp mà nếu cho một đối tượng cụ thể, có chức năng một nhiệm vụ cụ thể.Vì vậy, nếu tôi gửi nó một chuỗi và nó mong đợi một mảng, đó không phải là HDD - đó là tôi đang câm. –

2

Xác nhận tại phụ trợ giống như kiểm tra hành khách sau khi lên máy bay. Toàn bộ điểm xác nhận là ngăn chặn các yếu tố tiêm chích có thể làm hỏng ứng dụng của bạn. Vì vậy, bạn phải xác thực trước khi bạn nhập cổng :)

+0

Theo cách tương tự nếu bạn không tin tưởng những người sàng lọc tại cổng để luôn luôn làm công việc của họ đúng mỗi lần duy nhất nó an toàn hơn để làm một đôi -kiểm tra trước khi máy bay cất cánh: p Nhưng chắc chắn nên bắt đầu nhập kém hơn trước đó, nhưng phải chắc chắn kiểm tra cả hai. – Davy8

Các vấn đề liên quan