Câu trả lời đơn giản là bạn không thể lấy thông số dưới bất kỳ hình thức nào khác ngoài Chuỗi. Ít nhất, không sử dụng các API servlet tiêu chuẩn. Nhưng có một vài khả năng "thoát ra".
Nếu bạn chuẩn bị thực sự xấu, bạn có thể phá vỡ sự trừu tượng của đối tượng String và tiếp cận và ghi đè các ký tự. (Chuỗi thực tế có thể thay đổi nếu bạn chuẩn bị phá vỡ các quy tắc. Đây là một trong số ít trường hợp mà điều này có thể được biện minh.)
Có thể có một phần mở rộng API không chuẩn trong việc triển khai vùng chứa web của bạn (nói) HttpServletRequest
để thực hiện việc này. Nếu không, bạn có thể giữ mã nguồn và thêm mã nguồn. (Giả sử bạn đang sử dụng một container web mã nguồn mở.)
Có nói rằng, IMO cách tiếp cận "không dây" đối với an ninh Java là sai lầm, hoặc ít nhất là qua đánh giá về những gì nó đạt được.
Trình bảo vệ phương pháp "không dây" chống lại khả năng có thể tìm kiếm thông tin trong không gian địa chỉ của ứng dụng, định vị những thứ giống như chuỗi và đánh dấu các mật khẩu có thể. Về lý thuyết, điều này có thể được thực hiện bằng cách:
- một hack mà phá vỡ mô hình thực hiện của JVM và nhìn vào bộ nhớ liệu,
- gắn một debugger Java và trawling thông qua các đối tượng có thể truy cập,
- sử dụng "/ dev/mem "hoặc tương tự bộ nhớ đọc quá trình từ bên ngoài,
- truy cập phần còn lại của hình ảnh hoán đổi của chương trình trên ổ cứng hoặc
- bằng cách nào đó khiến nó đổ rác và đọc kết xuất.
Tuy nhiên, tất cả nhưng điều đầu tiên trong số này yêu cầu người xấu đã phá vỡ bảo mật trên hệ thống. Và nếu kẻ xấu đã làm điều đó có những cách khác (có lẽ đơn giản hơn) để ăn cắp mật khẩu từ chương trình của bạn ... mà cách tiếp cận "không dây" sẽ không ngăn cản.
Và nếu bạn lo lắng về việc hack khai thác lỗ hổng bảo mật Java để đọc bộ nhớ nguyên, lỗ hổng đó có thể được sử dụng theo các cách khác; ví dụ. để chèn mã để thay đổi cách mật khẩu được xử lý bởi mã.
Vì vậy, tóm lại, "không có chuỗi" đang bảo vệ chống lại các hacks thực sự khó khăn, hoặc chống lại các trường hợp an ninh của bạn đã được thổi. IMO, nó không phải là giá trị nỗ lực ... trừ khi bạn đang yêu cầu để thực hiện an ninh cấp quân sự.
Nguồn
2013-02-22 03:48:32
Không phải mọi thứ 1s và 0s .. Chuỗi bị đe dọa bảo mật hơn byte [] như thế nào? – smk
@smk: Bởi vì 'Chuỗi' có thể được tập trung, có nghĩa là chúng bám sát trong bộ nhớ lâu sau khi bạn sử dụng xong chúng. –
@smk Strings không thay đổi. Một khi bạn có một, nó sẽ treo xung quanh trong bộ nhớ cho đến khi nó được thu thập rác (lâu sau khi bạn đang thực hiện với nó). Với một 'byte []', khi bạn đã hoàn thành nó, bạn có thể ghi đè lên các nội dung để ngăn không cho đọc dữ liệu. – cheeken