Tôi đang giúp bạn tôi kết thúc mô-đun của mình cho một trang web. Từ ấn tượng đầu tiên của tôi nhìn vào các mô-đun của mình, tôi đã tìm thấy một số thứ rất nguy hiểm, nhưng anh ấy nói rằng phương pháp này là an toàn.Kiểm tra lỗ hổng byte rỗng
Một phần của mã:
session_start();
if(isset($_POST['foo']))
{
$_SESSION['foo'] = $_POST['foo'];
}
if(isset($_SESSION['foo']))
{
$foo['foo'] = $_SESSION['foo'];
}
if(is_file("inc/". $foo['foo'] . "/bar.php")) {
// code
}
else {
// code
}
Lưu ý: tập tin (inc/test/bar.php) tồn tại;
tôi muốn kiểm tra mã của mình, và tôi đã gửi các yêu cầu sau đây:
POST :: foo => kiểm tra/bar.php% 00
POST :: foo => kiểm tra/bar.php \ 0
curl_setopt ($ ch, CURLOPT_POSTFIELDS, 'foo = test/bar.php'. chr (0x00));
Nhưng không có phương pháp nào trong số này hoạt động. Mã đó có thực sự an toàn không? và làm thế nào ai đó có thể gửi một byte null để vượt qua nó an ninh. Tôi muốn chứng minh với bạn tôi rằng mã của anh ấy không an toàn.
Tôi không phải là một chuyên gia php vì vậy tôi sẽ để lại điều này như một bình luận, nhưng bạn không thể vượt qua một cái gì đó như "../../. ./../ "và giành quyền truy cập tùy ý vào hệ thống tệp? –
@ChrisThompson nó có "/bar.php" ở cuối để nó sẽ kiểm tra ../../../bar.php trong mọi trường hợp – John
phải ok vì vậy nó chỉ là một mối đe dọa nếu bạn có khả năng truy cập _some other_ ' quán ba.Tệp php' mà bạn không được phép truy cập –