Giả sử của bạn về mã bị rò rỉ bảo mật có thể đúng hoặc không đúng tùy thuộc vào ngôn ngữ bạn đang sử dụng. Trong mã C, nó có thể là một vấn đề (đặc biệt vì trong C, boolean chỉ là một số không khác không hoặc bằng 0) - nhưng trong hầu hết các ngôn ngữ được gõ mạnh (ví dụ: kiểm tra kiểu thời gian chạy) nếu passwordCheck
biến được khai báo là boolean, không có cách nào để gán một cái gì đó khác cho nó. Trong thực tế, mọi thứ trong một if
vị ngữ phải phân giải thành boolean, cho dù bạn sử dụng toán tử boolean hay chỉ đơn giản là sử dụng giá trị. Nếu bạn quản lý để có một loại đối tượng khác bị ràng buộc với passwordCheck
thời gian chạy sẽ ném một số loại ngoại lệ bất hợp pháp.
Các cấu trúc if / other đơn giản dễ đọc hơn nhiều so với các cấu trúc if / if - và ít gặp phải các sự cố vô ý nếu ai đó cố gắng lật công trình. Hãy lấy ví dụ tương tự trong một giây:
if(passwordCheck == false) {
denyAccess();
}
if(passwordCheck) {
letThemIn();
}
Ý nghĩa của các mệnh đề loại trừ lẫn nhau mà bạn muốn thực hiện ở trên bị mất. Đó là những gì nếu / khác xây dựng lồi. Hai nhánh hành quyết loại trừ lẫn nhau, trong đó một trong số chúng sẽ luôn chạy. Đây là một phần quan trọng của bảo mật - đảm bảo không có cách nào letThemIn
sau khi bạn gọi denyAccess
.
Với mục đích rõ ràng về mã và cho mục đích đảm bảo các phần quan trọng được bảo vệ nhiều nhất, chúng phải nằm trong mệnh đề chính ( if
phần). Hành vi không tuân thủ mặc định phải ở trong mệnh đề thay thế ( else
phần). Ví dụ:
if(passwordCheck) {
letThemIn();
} else {
denyAccess();
}
LƯU Ý: khi làm việc với các ngôn ngữ khác nhau, tôi đã phát triển một loại mã hóa giúp tránh câu hỏi "nếu đó là một chuỗi thì sao?" Về cơ bản, nó là đặt hằng số đầu tiên trong biểu thức boolean. Ví dụ, thay vì kiểm tra passwordCheck == false
tôi đang kiểm tra false == passwordCheck
. Điều này cũng tránh được vấn đề chuyển nhượng ngẫu nhiên có thể có trong C ++. Sử dụng phương pháp này, trình biên dịch sẽ khiếu nại nếu tôi gõ =
thay vì ==
. Trong các ngôn ngữ như Java và C #, trình biên dịch sẽ coi phép gán trong mệnh đề if là một lỗi, nhưng C ++ sẽ vui vẻ chấp nhận nó. Đó là lý do tại sao tôi cũng có xu hướng kiểm tra null với null
lần đầu tiên.
Nếu bạn thường xuyên thay đổi ngôn ngữ đặt hằng số đầu tiên là rất hữu ích. Tuy nhiên, trong nhóm của tôi, nó trái ngược với tiêu chuẩn mã hóa và trình biên dịch vẫn nắm bắt được những vấn đề đó. Nó có thể là một h khó khăn để phá vỡ.