我在我的网站上托管了一个 MySql 数据库,其中有一个名为 UsrLic 的表 任何想购买我的软件的人都必须注册并输入他/她生成的机器 key (+ 用户名、电子邮件...等)。
所以我的问题是:
我想通过我的软件自动化这个过程,这个过程会怎样? 我是否应该直接从我的软件连接和更新我的数据库(这意味着我必须在其中保存我所有的数据库连接参数 * 我的数据库用户名、密码、服务器 * 然后使用 ADO 或 MyDac 连接到这个数据库?如果是,如何这个过程安全吗?
或任何其他建议。
最佳答案
我建议在您的网站上使用 PHP 创建一个 API 并从 Delphi 调用该 API。
这样一来,数据库就永远只能供您的网络服务器使用,而不能供客户端应用程序使用。事实上,您应该在本地主机上或使用私有(private) IP 运行您的数据库,这样只有同一物理网络上的机器才能访问它。
我已经实现了这一点,并且在我们说话时再次实现它。
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使用 Post() 并发送以下值:
name=Marcus
email=marcus@gmail.com
register_api.php 的开头可能是这样的:
// 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";
}
德尔福
使用 Indy 的 TIdHTTP 组件及其 Post() 或 Get() 方法将数据发布到网站上的 register_api.php。
您将从您的 API 中以文本形式返回响应。
保持简单。
安全
所有验证都应在服务器 (API) 上完成。服务器必须是网守。
在调用任何函数(尤其是查询)之前,清理用户(客户端)对 API 的所有输入。
如果您使用的是共享虚拟主机,请确保 register.php 和 register_config.php 不是全局可读的。
如果您要传递敏感信息(听起来确实如此),您应该通过 HTTPS 从 Delphi 调用注册 API 函数。 HTTPS 提供端到端保护,因此任何人都无法嗅探通过网络发送的数据。
只需将 TIdSSLIOHandlerSocketOpenSSL 组件连接到您的 TIdHTTP 组件,您就可以开始了,减去任何证书验证。
使用 SSL 组件的 OnVerifyPeer 事件编写您自己的证书验证方法。这个很重要。如果您不验证服务器端证书,其他站点可以通过 DNS 中毒冒充您并从您的用户而不是您那里收集数据。尽管这很重要,但不要因此而耽搁,因为它需要更多的理解。在未来的版本中添加它。
关于mysql - 如何让用户在线注册我的产品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156914/