2011-11-16 81 views
1

我在我的網站上託管了一個MySql數據庫,其表名爲UsrLic 如果有人想購買我的軟件,必須註冊並輸入他/她的生成機器密鑰(+用戶名,電子郵件等) 。如何讓用戶在線註冊我的產品?

所以我的問題是:

我想這個過程從我的軟件自動完成,怎麼這個過程會是什麼? 我應該直接從我的軟件連接並更新我的數據庫(這意味着我必須將所有數據庫連接參數保存在其中*我的數據庫用戶名,密碼,服務器*,然後使用ADO或MyDac連接到此數據庫?如果是如何安全是這個過程?

或任何其他建議。

回答

5

我建議創建在PHP你的網站的API,並調用從德爾福的API。

這樣一來,該數據庫只適用於您的Web服務器而不是客戶端應用程序,事實上,您應該在本地主機或私有IP上運行數據庫,以便只有同一物理ical網絡可以達到它。

我已經實現了這一點,並在我們說話時再次實現它。

PHP

創建一個名爲register_config.php一個新的文件。在這個文件中,設置你的MySQL連接信息。

創建一個名爲register.php的文件。在這個文件中,把你的註冊功能。從這個文件中,包含'register_config.php'。你將傳遞參數給你在這裏創建的函數,他們將讀取和寫入你的數據庫。

創建一個名爲register_api.php的文件。從這個文件中,包含'register.php'。在這裏,您將處理從客戶端應用程序發送的POST或GET變量,調用register.php中的函數,並通過HTTP將結果返回給客戶端。你將不得不研究連接和查詢MySQL數據庫。 W3Schools tutorials會讓你很快做到這一點。

例如:

你的Delphi程序調用https://mysite/register_api.php早報(),併發送以下值:

name=Marcus 
[email protected] 

這裏怎麼register_api.php的開始可能看起來'S:

// Our actual database and registration functions are in this library 
include 'register.php'; 

// These are the name value pairs sent via POST from the client 
$name = $_POST['name']; 
$email = $_POST['email']; 

// Sanitize and validate the input here... 

// Register them in the DB by calling my function in register.php 
if registerBuyer($name, $email) { 
    // Let them know we succeeded 
    echo "OK"; 
} else { 
    // Let them know we failed 
    echo "ERROR"; 
} 

Delphi

使用Indy的TIdHTTP組件及其Post()或Get()方法將數據發佈到網站上的register_api.php。

您將從API獲取文本回復。

保持簡單。

安全

所有驗證應在服務器(API)來完成。服務器必須是守門人。

清理所有輸入API從用戶(客戶端)調用任何功能,特別是查詢之前。

如果您使用的共享網絡託管,確保register.php和register_config.php並非所有人可讀。

如果您傳遞敏感信息,這聽起來像你,你應該叫德爾福註冊API函數通過HTTPS。 HTTPS提供端到端保護,因此沒有人可以嗅探到從線路發送的數據。

只需聯播一TIdSSLIOHandlerSocketOpenSSL組件添加到您TIdHTTP組件,你是好去,減去任何證書驗證。

使用SSL組件的OnVerifyPeer事件來寫自己的證書驗證方法。這個很重要。如果您未驗證服務器端證書,則其他站點可能會冒充DNS中毒,並從您的用戶而不是您收集數據。雖然這很重要,但不要讓這讓你感到擔憂,因爲它需要更多的理解。在將來的版本中添加這個。

+1

或者不在PHP中,但是還是一個API。也許你可以在Delphi中構建一個web服務? – GolezTrol

+0

能否請你解釋一下,或者只是一個小樣本,這樣我就可以得到一個如何操作 – randydom

+0

謝謝馬庫斯亞當斯,你可以給我一個樣品! – randydom

2

爲什麼不使用例如分享它?他們還處理購買過程(我不明白你會怎麼做自己..),並讓你通過delphi應用程序創建一個註冊碼。