Dòng mới trong tên tập tin


24

Tôi hiểu và chấp nhận tiền đề rằng kịch bản shell 1 phòng thủ là cả thận trọng và, về lâu dài, bền vững hơn.

Nhiều câu trả lời cho các câu hỏi xử lý văn bản ở đây tuân theo nguyên tắc này bằng cách xây dựng các câu trả lời cho các tên tệp không chính thống; có thể chứa dấu cách, dấu gạch ngang và dòng mới.

Làm thế nào phổ biến là dòng mới trong tên tập tin? Đặc biệt:

  • Có ứng dụng nào tạo tên tệp bao gồm dòng mới theo mặc định không?
  • Có bất kỳ tình huống mà nó sẽ được mong muốn để tạo ra tên tập tin như vậy?
  • Hay họ chủ yếu là một trường hợp lỗi người dùng?

[1] Có nghĩa là lập kế hoạch và quản lý phạm vi rộng nhất có thể của các tình huống và tình huống ...

Câu hỏi lấy cảm hứng từ nhận xét (khá đơn giản) về câu hỏi này .


4
Câu trả lời ngắn gọn là tên tập tin kỳ lạ với dòng mới và / hoặc ký tự không thể in được không bao giờ là thông lệ tốt, các ứng dụng hợp lý không tạo ra chúng và bạn chỉ thực sự nhìn thấy chúng nếu ai đó đang cố gắng phá vỡ các tập lệnh hoặc chương trình shell của bạn không xử lý chính xác tên đó. Tôi sẽ để người khác cung cấp câu trả lời chi tiết hơn với các tài liệu tham khảo và như vậy.
jw013

Câu trả lời:


26

Tôi chưa bao giờ thấy một tên tệp với một dòng mới ngoài những tên được tạo ra một cách có chủ ý để kiểm tra các ứng dụng thao túng tên tệp. Tên tệp chứa dòng mới có thể xuất hiện vì:

  • Một số lỗi hoặc lỗi người dùng (ví dụ: sao chép-dán xấu) dẫn đến tên tệp ngoài ý muốn.
  • Một số tham nhũng hệ thống tập tin ảnh hưởng đến một tên tập tin.
  • Ai đó đã cố tình tạo một tên tệp tin kỳ lạ của người Viking để khai thác lỗ hổng bảo mật, trong đó một ứng dụng đặt niềm tin nhiều hơn vào tên tệp mà nó đã được thông qua hơn mức cần thiết.

POSIX định nghĩa một tên tệp là tên một tên bao gồm từ 1 đến {NAME_MAX} byte được sử dụng để đặt tên cho một tệp. Các ký tự soạn tên có thể được chọn từ tập hợp tất cả các giá trị ký tự không bao gồm ký tự gạch chéo và byte rỗng. Các tên tập tin nằm rải rác và dot-dot có ý nghĩa đặc biệt.”Không có gì bảo đảm rằng tất cả các hệ thống tập tin sẽ chấp nhận‘kỳ lạ’tên tập tin (chỉ đảm bảo nhân vật kí tự ASCII, chữ số, thời gian, dấu gạch ngang và dấu gạch dưới , tức là A-Z, a-z, 0-9._-, với gạch nối bị cấm ở vị trí đầu tiên), nhưng hầu hết các hệ thống tập tin gốc trên các đơn vị hiện đại đều làm.


Vì vậy, spacestrong tên tập tin không được đảm bảo là di động? Sẽ rất hữu ích nếu bạn làm rõ rằng ba nhân vật cuối cùng là period, underscore, and hyphen. Với liên kết được gạch chân, thật khó để nói.
toxalot

4
@toxalot Không, không gian không được đảm bảo là di động, cũng không ,(được sử dụng bởi RCS), :(được sử dụng bởi X.org), ~(được sử dụng bởi nhiều chương trình trên các tệp sao lưu), nhưng chúng được hỗ trợ bởi hầu hết các hệ thống hiện đại.
Gilles 'SO- ngừng trở nên xấu xa'

22

Khi viết một bài báo, tôi thường thu thập thư mục của các tệp PDF từ nhiều nguồn khác nhau. Không phải tất cả trong số này đều chứa siêu dữ liệu chính xác, điều đó có nghĩa là đôi khi tôi sao chép-dán tiêu đề của bài báo từ trình xem PDF vào tên tệp. Điều này thường dẫn đến các dòng mới trong tên tệp, nhưng chưa bao giờ là vấn đề với bất kỳ công cụ nào tôi đã sử dụng.

IMHO không có gì 'phòng thủ' về việc mã hóa theo một tiêu chuẩn .. một tiêu chuẩn quy định rằng các dòng mới được cho phép trong tên tệp. Nếu tập lệnh của bạn không xử lý tất cả các tên tệp được cho phép trong tiêu chuẩn, thì tập lệnh của bạn bị hỏng.


2
Cảm ơn ví dụ thế giới thực; nó nhấn mạnh quan điểm của bạn về tiêu chuẩn khá hùng hồn ...
jasonwryan

6
+1 cho "Nếu tập lệnh của bạn không xử lý tất cả các tên tệp được cho phép trong tiêu chuẩn, thì tập lệnh của bạn bị hỏng " (nhấn mạnh thêm)
jw013


, Tôi đã xem qua bài đăng này vì lý do chính xác như vậy! Chỉ cần cố gắng tìm ra cách viết một lệnh để chuyển đổi dòng mới sang không gian.
Hi-Angel

2

Tôi chưa bao giờ thấy người dùng BÌNH THƯỜNG sử dụng dòng mới trong tên tệp. Dường như mục đích chính của chúng là (1) giúp kẻ tấn công dễ dàng phá hoại hệ thống của bạn và (2) khiến việc viết chương trình bảo mật trở nên khó khăn hơn :-(. Tuy nhiên, các ứng dụng Unix hiện đại (như Linux) cho phép chúng , vì vậy bạn phải chuẩn bị cho họ nếu bạn muốn một chương trình chống lại sự tấn công.

"Tên tệp và tên đường dẫn trong Shell: Cách thực hiện chính xác" cho thấy cách xử lý chính xác.


Tôi là người dùng bình thường và tôi có dòng mới trong tên tệp của mình. Kịch bản được nêu trong câu trả lời của @sml đã xảy ra với tôi hơn một lần. Điều thú vị đối với tôi là làm thế nào một dòng mới trong tên tệp có thể được sử dụng để "lật đổ hệ thống"? Bạn có nguồn nào giải thích điều đó không?
Joseph R.

@JosephR. Tôi không thể nghĩ ra cách nào để thỏa hiệp một hệ thống, nhưng bạn có thể sử dụng nó như một DOS cho các ứng dụng không xử lý các dòng mới (và thay vào đó là sự cố)
strugee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.