2010-09-20 7 views
5

Mục tiêu của tôi là mở một trang web an toàn trong trình duyệt mặc định của người dùng. URL cho trang web này được coi là "không đáng tin cậy" (coi đó là liên kết trong tài liệu được mở bằng phần mềm này, nhưng tài liệu có thể ở bất kỳ đâu và liên kết trong đó có thể độc hại)Quy trình an toàn.Bắt đầu triển khai các chuỗi URL không đáng tin cậy

Tôi muốn tránh một người nào đó đi ngang qua "C: \ Windows \ malicious_code.exe" tắt dưới dạng URL

suy nghĩ hiện tại của tôi là để làm một cái gì đó như thế này:

Uri url = new Uri(urlString, UriKind.Absolute); 
if(url.Scheme == Uri.UriSchemeHttp || url.Scheme == Uri.UriSchemeHttps) 
{ 
    Process.Start(url.AbsoluteUri); 
} 

tôi quên về bất cứ điều gì khác mà 'urlString' của tôi có thể chứa làm cho điều này trở nên nguy hiểm (ví dụ: một ký tự dòng mới cho phép ai đó lẻn vào một quá trình thứ hai được bắt đầu sau URL hoặc thuộc tính ible thực hiện của một thực thi tương đối bắt đầu với http)? Tôi chắc rằng cả hai trường hợp này đều được xử lý bởi điều này (vì tôi không tin Process.Start cho phép bạn bắt đầu hai tiến trình như bạn làm trong một tệp BATCH và điều này chỉ cho phép các chuỗi bắt đầu bằng http:. hoặc https: và là các url hợp lệ)

Có cách nào tốt hơn để thực hiện việc này trong C# không?

Trả lời

1

gì bạn muốn kiểm tra là scheme của url (tức ftp://, http://, file://, vv) Dưới đây là danh sách các chương trình: http://en.wikipedia.org/wiki/URI_scheme#Official_IANA-registered_schemes

Để tìm các chương trình của một URL, sử dụng:

Uri u = new Uri("C:\\Windows"); 
String scheme = (u.GetLeftPart(UriPartial.Scheme).ToString()); 

Đối với tôi, ví dụ trên cho số file://. Chỉ cần kiểm tra sơ đồ, sử dụng mã ở trên và từ chối những chương trình bạn muốn lọc. Ngoài ra, bao quanh phân tích cú pháp với khối try-catch và nếu ngoại lệ bị bắt, hãy từ chối URL; nó không thể được phân tích cú pháp, do đó bạn không nên tin tưởng nó.

Nếu bạn muốn cực kỳ an toàn, bạn luôn có thể phân tích cú pháp URL bằng cách sử dụng trình phân tích cú pháp URL và tạo lại nó, xác thực từng phần khi bạn đi cùng.

+2

Tôi khá chắc chắn về cơ bản những gì đã được triển khai trong câu hỏi của tôi :) – userx

+0

Những gì bạn có là khá chắc chắn. Tôi không thể nghĩ ra bất cứ điều gì khác có thể lẻn qua. –