Nama folder terdaftar di File Explorer hanya dengan empat titik ....
.
Ketika saya mencoba membukanya, saya masuk ke semacam lingkaran lubang kelinci tanpa akhir di mana saya membuka folder yang sama berulang-ulang - saya bisa melakukan ini tanpa henti. Menampilkan jalan seperti C:\ExamplePath\....\....\....\....\....
, dll.
Itu menggantung kompilasi TypeScript saya di satu proyek tertentu. Butuh waktu lebih dari setahun sebelum saya menemukan folder ini dan masalah yang terkait, karena itu berakar dalam di folder bersarang. Saya tidak pernah mengharapkan masalah seperti ini, jadi saya tidak pernah mencarinya.
Saya tidak bisa menghapus folder dengan cara biasa karena nama khusus. Pada akhirnya, saya bisa menghapusnya dengan menggunakan baris perintah dan menghapus folder induk dengan rd /s /q path
.
Setelah itu, saya mencoba membuat folder lagi tetapi tidak dapat melakukannya dengan File Explorer dan baris perintah.
Dalam 20 tahun lebih saya menggunakan Windows saya belum pernah melihat bug ini sebelumnya, jadi saya bisa membayangkan bahwa itu benar-benar akan menjadi masalah yang mengganggu dan membingungkan bagi pengguna amatir.
Adakah yang tahu bagaimana ini bisa terjadi dan bagaimana mereproduksi masalah ini?
Memperbarui
Untuk orang yang tertarik: jalur ini terletak jauh di dalam folder TFS. Jadi mungkin TFS menggunakan metode bypass @grawity menjelaskan ( "Berbagai manajer file, pengarsipan, dll" )
Apakah saya menemukan bug TFS yang langka?
sumber
..
dapat digunakan di jalur untuk menunjukkan 'naik satu folder', saya akan menebak bahwa di suatu tempat di sepanjang garis, beberapa program atau skrip menggabungkan dua string untuk membuat jalur, satu berakhir dengan..
, dan yang berikutnya dimulai dengan..
, dan karena menggunakan salah satu teknik yang disebutkan di bawah, itu berhasil membuat jalan, meskipun tidak ada pemisah folder di antara mereka.GET /....\\....\\....\\....\\....\\....\\....\\....\\....\\winnt\\win.ini
. Jelas ada / beberapa kerentanan di suatu tempat yang coba dieksploitasi...
, bukan....
. Ini hanyalah sebuah cara untuk dilalui\winnt
terlepas dari kedalaman titik awal (akar web), asalkan titik awalnya kurang dari 9 level. Itu bergantung pada fakta bahwa pergi..
dari direktori root membuat Anda di direktori root...
yang adalah mengapa saya menemukan satu ini agak aneh.Jawaban:
Win32 tidak membiarkan Anda membuat file atau folder dengan nama yang diakhiri
.
- semua titik dilucuti dari ujung. Sebaliknya, mencoba membuattest.
penampilantest
muncul. (Ini untuk kompatibilitas dengan 8,3 nama dalam perangkat lunak era DOS / Win9x lama.)Akibatnya, setiap kali Anda mencoba mengakses folder bernama
....
, namanya akan dikurangi menjadi string kosong, dan Anda kembali ke folder tempat Anda berada sebelumnya.Namun, kernel NT mengizinkan nama-nama tersebut. Ada berbagai mekanisme yang memotong batasan nama file yang dipaksakan oleh Win32 API - misalnya, WSL (Windows Subsystem untuk Linux) tidak berjalan di atas Win32 dan tidak terpengaruh olehnya. Ada juga
\\?\
metode bypass, "pintu belakang" yang disengaja yang tersisa untuk program yang tahu apa yang mereka lakukan. Meskipun Anda tidak dapat membuatC:\Example\....\
, Anda dapat membuatnya dengan\\?\C:\Example\....\
baik.Anda juga dapat menghapus direktori seperti itu
rmdir \\?\C:\path\...
dari Cmd (saya belum pernah menguji dengan PowerShell).Berbagai manajer file, pengarsip, dll. Mungkin menggunakan
\\?\
metode ini agar dapat menggunakan nama jalur yang lebih panjang dari biasanya - dan dengan melakukannya, mereka juga tidak terpengaruh oleh kode kompatibilitas dalam Win32; mereka memotong dot stripping, serta terjemahan nama file ajaib sepertiCON
atauNUL
.Jadi bisa jadi itu salah satu program Anda:
\\?\
untuk mengakses file,....
- tetapi itu tidak benar-benar mungkin untuk mengetahui dengan pasti setelah fakta.sumber
echo "" > ....::$INDEX_ALLOCATION
. Ini akan membuat folder bernama....
(masih menunjuk ke folder saat ini).\\?\"
di sumber referensi .NET , itu menyebabkan kesalahan runtime di server mereka).com1
nama file ajaibSelain jawaban @ grawity, program Win32 juga dapat melakukan ini dengan memanggil API "asli" secara langsung. Jika saya tidak salah, dalam kasus ini, itu adalah NtCreateDirectoryObject. Panggilan-panggilan tersebut didokumentasikan dengan cukup baik saat ini, terutama rekan kernelnya (yang tidak dapat Anda panggil dari program Win32), dalam hal ini, ZwCreateDirectoryObject.
Mengenai "kedalaman tanpa akhir", cara mudah untuk mencapai ini adalah dengan menggunakan tautan. Buat direktori, lalu di dalamnya, buat persimpangan untuk itu (Anda dapat menggunakan
mklink /j
misalnya), dan Anda akan berakhir dengan struktur yang sangat dalam. Terakhir kali saya melakukan ini pada Windows 2000, ada akhir rekursi (Anda tidak bisa "menggali tanpa batas"). Mungkin pada OS yang lebih baru batasnya lebih besar atau dihapus, Anda juga dapat membuat katakanlah 10 direktori masing-masing menjadi anak dari yang sebelumnya, dan di yang ke-10, buat tautan kembali ke yang pertama.sumber
mkdir ....
Ada cara yang lebih mudah untuk membuat direktori. Dari jenis prompt perintah:
MD ....\
dan tekan enter, itu akan membuat direktori dengan empat titik. Direktori ini juga dapat dilihat dengan explorer.
Ada kekurangan dalam MS-DOS yang kembali ke versi 1.0. MS telah mengetahuinya selama beberapa waktu tetapi tidak bisa atau tidak mau memperbaikinya. Mereka telah memperbaiki masalah dengan PowerShell.
BTW, jika Anda mencoba:
RD ....
Ini akan gagal dihapus. Anda perlu menggunakan sintaksis khusus ini untuk menghapusnya.
RD ....\
Saya menggunakan ini pada server tertentu yang saya admin. Saya sering membuat folder pengguna di root disk dan saya tidak ingin administrator lain datang dan menghapusnya.
Jadi saya akan masuk ke dalam folder saya dan membuat subfolder bernama CON, AUX, atau LPT, dll ...
Jika Admin lain ingin menghapus folder saya, mereka harus tahu cara menghapus subfolder ini terlebih dahulu.
EDIT: Saya sedang memikirkan diskusi ini pagi ini dan saya memutuskan untuk mengambil satu langkah lebih jauh. Saya menganggap mod akan memutuskan apakah ini relevan.
Saya tidak dapat memasukkan CD ke folder.
Pertimbangkan, jika saya MD c: \ test maka CD C: \ test dan MD .... \ Saya berakhir dengan C: \ test ....
dan semuanya baik-baik saja.
Tapi CD .... gagal dan menendang saya kembali ke tes C: \. (CD .... \ melakukan hal yang sama.)
Namun saya bisa DIR .... dan mendapatkan daftar dir. aku juga bisa
MD C: \ test .... \ temp dan itu menciptakan sub-dir di ....
Saya juga bisa CD C: \ test .... \ temp dan masuk ke sub-sub direktori itu.
Tetapi sementara di C: \ test .... \ temp, jika saya CD .. Saya kembali di C: \ test.
Saya tidak dapat melakukan cd ke direktori itu, tetapi saya dapat memanipulasi folder dengan membuat subfolder, dan sesuatu yang cukup menarik
ECHO "Pengujian" >> C: \ test .... \ test.txt
juga berfungsi dan membuat file di folder itu. Jadi saya bisa membuat folder dengan empat titik, saya bisa menambahkan file dan folder ke dalamnya, saya bisa mendapatkan daftar dir itu, tapi saya tidak bisa CD ke dalamnya. Mungkinkah ada semacam jenius jahat yang digunakan untuk ini? Saya minta maaf kepada mod jika saya telah tersesat terlalu jauh tentunya.
sumber
MD ....` only creates
.... \ .... `tree - hanya ada satu langkah rekursi.Saya memiliki masalah yang sama. Dalam kasus saya, itu adalah salah ketik dalam perintah untuk .NET Core publish:
Itu menciptakan direktori dengan nama '....', yang saya tidak bisa hapus atau ubah namanya. Direktori ini bertindak seperti referensi ke direktori induk. Jika saya masuk ke dalam folder itu, saya masih berada di folder induk, tetapi path ditambahkan oleh '.... \'.
Saya mencoba semua perintah yang disebutkan dalam topik ini, tetapi tidak satupun yang berhasil. Dalam pemahaman saya, itu bertindak seperti itu, karena saya punya file dan direktori lain di direktori induk, jadi saya harus menggunakan parameter yang secara rekursif dapat menghapus semua konten.
Saya tahu, bahwa perintah ini:
dapat menghapus direktori '....'. Ini hanya menghapus referensi ke direktori induk, yang sebenarnya adalah direktori '....' ini, tidak lebih, tidak kurang. Meskipun ada argumen perintah:
direktori induk tetap tidak tersentuh.
sumber