2009-09-03 30 views
5

Tôi đã tạo một ứng dụng web được lưu trữ trên Godaddy trên máy chủ được chia sẻ. Tôi có kế hoạch sử dụng paypal cho các giao dịch của tôi, điều này tạo ra một vấn đề.Lưu trữ thông tin đăng nhập PayPal trong ứng dụng web (asp.net) trên máy chủ chia sẻ

Tại thời điểm này, thông tin đăng nhập (email và mật khẩu paypal) được mã hóa cứng, điều này theo như tôi hiểu được giải pháp tồi tệ nhất. Tùy chọn duy nhất khác mà tôi biết là trong tệp web.config, điều này có vẻ không an toàn lắm.

Bạn có thể chỉ cho tôi theo hướng cung cấp bảo mật mong muốn và hoạt động trong môi trường máy chủ được chia sẻ không?

Trân Alexandros

Trả lời

2

Trên một máy chủ chia sẻ, phương pháp đơn giản nhất ít nhất ở cái nhìn đầu tiên sẽ được mã hóa mật khẩu và lưu nó trong cơ sở dữ liệu của bạn.

Triển khai có thể được thực hiện với bất kỳ cơ chế mã hóa nào của bạn. Sau đó, từ một quan điểm quan trọng, bạn có một số tùy chọn để lưu trữ nó, với mức độ bảo mật khác nhau, thực sự phụ thuộc vào cách "hoang tưởng" bạn với điều này.

  1. Đơn giản chỉ cần lưu trữ các khóa mã hóa trong web.config như một Setting App (Least an toàn, nhưng truy cập vào web.config là hạn chế và các công cụ khác nhạy cảm là có rồi, như DB Passwords)
  2. Tạo phần cấu hình tùy chỉnh cho web.confg, sau đó mã hóa và lưu trữ các giá trị ở đó. (Điều này an toàn hơn vì không thể đọc được khóa của bạn qua văn bản thuần túy)
  3. Lưu khóa mã hóa trong bảng cơ sở dữ liệu và giới hạn bảng đó được truy vấn chỉ là một tài khoản người dùng. (Tùy thuộc vào suy nghĩ của bạn, đây có thể là giải pháp di động nhất mặc dù ..)
+0

Làm thế nào để bạn lưu trữ chìa khóa trong một cách mà cho phép các ứng dụng để sử dụng mật khẩu mà không để lại chìa khóa ở một vị trí không an toàn ? – Tyrsius

+0

Có một vài tùy chọn cho điều này .... bạn có thể sử dụng khóa có trong web.config (MachineKey) hoặc bạn có thể tạo khóa của riêng mình và đặt nó vào tùy chọn web.config được mã hóa. –

+0

@Tyrsius - Tôi đã thêm một số chi tiết cũng như với các tùy chọn chỉ để cung cấp cho bạn một số suy nghĩ. –

0

Bạn có thể lưu chúng trong web.config, sau đó mã hóa tệp web.config?

Hoặc ít nhất, mã hóa chúng riêng lẻ trong web.config?

0

Tôi nghĩ bạn có các tùy chọn sau.

  1. Mã hóa tập tin web.config

  2. Store trong cơ sở dữ liệu sử dụng mã hóa

  3. Tạo một Class Library và tạo ra một lớp mà sẽ giữ thông tin này. Bây giờ trên môi trường được chia sẻ, nó sẽ chỉ được thêm dưới dạng dll bên trong thư mục Bin.

+0

1. tôi biết nó có thể được thực hiện. tôi không chắc chắn nó có thể được thực hiện trong máy chủ chia sẻ. 2 và 3. đi theo vấn đề dịch ngược. tôi có bị hoang tưởng không? –

+0

Một trong những yêu thích của tôi: Những gì một người đàn ông làm, người đàn ông khác có thể hoàn tác. Không có những gì bạn làm. Nếu ai đó cố gắng, anh ta có thể hoàn tác nó. Và bây giờ bạn đã hoang tưởng hơn trước đây, hãy bình tĩnh và suy nghĩ: Thông tin của tôi có hấp dẫn đối với sự chú ý của bánh quy không? Nếu không, chỉ cần mã hóa thông tin trong web.config là đủ. – rcdmk

3

sự lựa chọn của bạn là: mật khẩu

  1. API + chữ ký API. Bạn sẽ có để lưu trữ ở đâu đó dưới dạng văn bản thuần túy hoặc nội dung nào đó có thể giải mã được, có thể là là tệp hoặc cơ sở dữ liệu.

  2. Mật khẩu API + chứng chỉ API. Bạn sẽ phải kiểm tra xem nhà cung cấp dịch vụ lưu trữ có cho phép người dùng thiết lập kết nối SSL cho các máy chủ khác (ví dụ: CURLOPT_SSLCERT bằng PHP). Nếu có thể, hãy sử dụng số .

Tuy nhiên, bất kể cách bạn chọn, nếu hacker có thể xâm nhập vào tài khoản của bạn, họ sẽ có thể truy xuất mật khẩu hoặc tệp chứng nhận của bạn.

p.s. xin lưu ý rằng các điều khoản "Mật khẩu API", "chữ ký API" và "chứng chỉ API" là các thuật ngữ mà chúng tham chiếu trong tài liệu tham khảo API PayPal và hướng dẫn cho nhà phát triển.

+0

Từ ngữ cố định và đã xóa 'chữ ký' khỏi tùy chọn thứ 2, vì chứng chỉ API không có chữ ký API và ngược lại. – Robert

+0

@Robert Cảm ơn bạn đã chỉnh sửa. :) – shinkou

0

Vì bạn không có quyền truy cập vào máy chủ, bạn sẽ cần phải chạy lệnh để mã hóa các phần của web.config của bạn thông qua mã. Bạn có thể làm điều này bằng cách tạo một trang web đơn giản và chạy nó trên trang tải hoặc trên một nút bấm. Dưới đây là khối mã bạn sẽ cần phải chạy, chỉ sửa đổi một chút từ nguồn tôi lấy từ Microsoft (http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.protectsection.aspx). Mặc dù ... mã này đã không thực sự làm việc cho tôi. Không phải là mã không chính xác, nhưng vì tài khoản của tôi không được phép lưu trữ khóa Rsa, kết quả của bạn có thể thay đổi. Nếu điều này không hoạt động thì hãy đọc tiếp cho tùy chọn 2.

' Get the current configuration file.' 
    Dim config As System.Configuration.Configuration = Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Nothing) 

    ' Get the section.' 
    Dim section As AppSettingsSection = CType(config.GetSection("appSettings"), AppSettingsSection) 

    ' Protect (encrypt) the section.' 
    section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider") 

    ' Save the encrypted section.' 
    section.SectionInformation.ForceSave = True 
    config.Save(ConfigurationSaveMode.Full) 

Tín dụng: Tôi tìm thấy liên kết đó với mã qua Need Encrypted connection string and stmp information in the web.config.

Tùy chọn 2: Vì lý do bảo mật bạn vẫn muốn sử dụng phím máy vì vậy nếu ai đó quản lý để tải xuống tệp web.config của bạn, họ sẽ không thể giải mã cài đặt của bạn. Một cách để làm điều này là mã hóa tất cả các thiết lập của bạn bằng cách sử dụng phím máy bằng tay, và giải mã chúng mỗi khi bạn cần sử dụng chúng, hoặc bạn có thể lưu chúng trong bộ nhớ cache trên mỗi lần khởi động ứng dụng.

Để mã hóa và giải mã một ứng dụng giá trị quan trọng bạn có thể sử dụng mã như thế này:

Dim encryptedString As String = Convert.ToBase64String(ProtectedData.Protect(System.Text.UTF8Encoding.UTF32.GetBytes("Testing"), Nothing, DataProtectionScope.LocalMachine)) 
    Dim decryptedString As String = System.Text.UTF8Encoding.UTF32.GetString(ProtectedData.Unprotect(Convert.FromBase64String(encryptedString), Nothing, DataProtectionScope.LocalMachine)) 

    Response.Write(encryptedString + " - " + decryptedString) 
+0

Tôi đã không thể có được phương pháp đầu tiên để làm việc (dịch mã để C#), chạy vào các lỗi khác nhau với một vài cách tiếp cận khác nhau. Phương pháp thứ hai có vẻ như nó dựa trên máy chủ lưu trữ không thay đổi. Với một máy chủ chia sẻ, đây không phải là một giả định không an toàn sao? – Tyrsius

+0

Bạn là câu trả lời duy nhất mới trong một tuần, có vẻ như bạn nhận được tiền thưởng theo mặc định. – Tyrsius

+0

@Tyrsius - Một chút trễ, nhưng bạn không phải trả tiền thưởng nếu không ai đáp ứng được kỳ vọng của bạn. Quay lại câu hỏi: Nếu bạn đang giả định rằng máy chủ lưu trữ có thể thay đổi thì bạn sẽ cần phải lưu trữ một khóa mã hóa trong một khóa có thể truy cập, giống như một appSetting khác. Tôi đã cố gắng để tránh điều này bởi vì nó có nghĩa là nếu bằng cách nào đó ai đó quản lý để tải về web.config của bạn, họ sẽ có thể sử dụng chìa khóa để giải mã thông tin PayPal của bạn. Tại sao bạn không liên hệ với máy chủ lưu trữ web của mình và hỏi họ xem bạn có thay đổi máy chủ hay không; có lẽ nó không có gì bạn thậm chí cần phải lo lắng về. – Peter

Các vấn đề liên quan