mysql - 如何让用户在线注册我的产品?

标签 mysql delphi registration

我在我的网站上托管了一个 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/

相关文章:

delphi - 在 delphi seattle 或代码分析中找不到内联变量集成

tomcat - Spring MVC : components for user registration?

typo3 - 在(例如)tt_content.php TCA 中使用 call_user_func() 会更好吗?为什么? (TYPO3)

mysql - 如何将 md5 函数应用于 django orm 中的字段?

Mysql INNER JOIN 和 HAVING COUNT

java - 为什么 hibernate Criteria 不维护 criteria.list() 结果的顺序?

delphi - Val 不适用于 UInt64?

delphi - FireMonkey 并显示所有者表单的模式对话框中心

android - GCM 通知重复问题。多次收到同一条消息

php - 如何为社交网站中的新帖子创建 post_id