Như được đề xuất ở nơi khác, điều này thường không phải là những gì bạn muốn làm. Nó thường là tốt nhất để tạo ra một tập tin tạm thời bằng cách sử dụng một phương pháp an toàn như File.createTempFile().
Bạn không nên làm điều này với danh sách cho phép và chỉ giữ các ký tự 'tốt'. Nếu tập tin được tạo thành chỉ có các ký tự Trung Quốc thì bạn sẽ loại bỏ mọi thứ ra khỏi nó. Chúng tôi không thể sử dụng danh sách trắng vì lý do này, chúng tôi phải sử dụng danh sách đen.
Linux khá nhiều cho phép bất cứ điều gì có thể là một nỗi đau thực sự. Tôi sẽ chỉ giới hạn Linux vào cùng một danh sách mà bạn giới hạn Windows để bạn tiết kiệm cho mình những cơn đau đầu trong tương lai.
Sử dụng đoạn mã C# này trên Windows Tôi đã tạo danh sách các ký tự không hợp lệ trên Windows. Có một vài nhân vật trong danh sách này nhiều hơn bạn có thể nghĩ (41) vì vậy tôi sẽ không khuyên bạn nên cố gắng tạo danh sách của riêng bạn.
foreach (char c in new string(Path.GetInvalidFileNameChars()))
{
Console.Write((int)c);
Console.Write(",");
}
Đây là một lớp Java đơn giản 'làm sạch' tên tệp.
public class FileNameCleaner {
final static int[] illegalChars = {34, 60, 62, 124, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 58, 42, 63, 92, 47};
static {
Arrays.sort(illegalChars);
}
public static String cleanFileName(String badFileName) {
StringBuilder cleanName = new StringBuilder();
for (int i = 0; i < badFileName.length(); i++) {
int c = (int)badFileName.charAt(i);
if (Arrays.binarySearch(illegalChars, c) < 0) {
cleanName.append((char)c);
}
}
return cleanName.toString();
}
}
EDIT: Vì Stephen đề xuất bạn cũng nên xác minh rằng các truy cập tệp này chỉ xảy ra trong thư mục bạn cho phép.
Câu trả lời sau có mã mẫu để thiết lập ngữ cảnh bảo mật tùy chỉnh trong Java và sau đó thực thi mã trong 'sandbox' đó.
How do you create a secure JEXL (scripting) sandbox?
Ben, bạn có thể cung cấp một số ví dụ không? – OscarRyz
Đã thêm nhận xét đánh dấu câu hỏi vào câu hỏi của tôi. –