내가 디렉토리와이 스크립트와 그 내용을 모두 제거하는 것을 시도하고있다 ...은밀한 디렉토리 제거가 작동하지 않습니까?
<?php
$app = $_POST['app'];
if (isset($_POST['app'])) {
$dir = "../apps/" . $app . "/";
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
}
}
?>
은 $ 포스트는 잘 작동하고 스크립트가 오류를 반환하지 않습니다하지만 그냥 디렉토리를 삭제하지. 폴더 권한과 관련이있을 수 있습니까? PHP 확장을 활성화해야합니까?
- EDIT-- 링크 된 복제물은 내가 원하는 것을하지 않으며 코드를 변경하는 방법을 모른다. 나는 클라이언트 측에서 디렉토리를 삭제하므로 __DIR__
이/test/app와 같은 경로를 유지하므로이 \ test \ app와 같아야합니다. 코드는 폴더를 제거하지 않지만 작동하지 않습니다. 모든 내용을 제거하십시오. 나는 그것이 FilesystemIterator::SKIP_DOTS
라인과 관련이 있다고 믿습니다. 사용자가 응용 프로그램을 다시 설치하면 중복 폴더 때문에 작업하지 않을 수 있기 때문에 폴더를 제거하는 코드가 필요합니다.
근무 코드 :
<?php
$app = $_POST['app'];
if (isset($_POST['app'])) {
$dir ="../apps/" . $app;
$di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($ri as $file) {
$file->isDir() ? rmdir($file) : unlink($file);
}
rmdir($dir);
}
?>
실제로 연결된 속임수에서 수락 된 답변을 사용하고 싶습니다. 사용하기가 훨씬 쉽습니다. 그 외에도 경로가 실제로 '../apps/'폴더 아래에 있는지 확인하고자합니다. 현재 악의적 인 사용자는 디렉토리 탐색 공격을 사용하여 '../apps/../'가 될 경로로 '..'을 전달할 수 있습니다. – Gordon
안녕 @ 고든은 답장을 보내 주셔서 감사합니다. '__DIR__'이 디렉토리 경로 앞에 무엇을 의미하는지 설명해 주시겠습니까? 나는 방금 그 코드를 사용했고 내 디렉토리는 여전히 삭제되지 않고있다. – ChristopherStrydom
내 질문은 복제 된 것으로 믿을 수 없다. @Gordon은 내 업데이트 된 질문을 볼 수 있겠는가? – ChristopherStrydom