【问题标题】:License Check using Php Mysql [duplicate]使用 Php Mysql 进行许可证检查 [重复]
【发布时间】:2013-01-02 23:47:48
【问题描述】:

可能重复:
How to safely store a password inside PHP code?

所以这就是场景 我有一个 C# 程序。 它会将序列号发送到我的网站。 (例如:www.example.com/LicenseCheck.php) 假设它以串行方式发送 1234-1234-1234。

licenseCheck.php 然后将连接到我的 mysql:

<?php
$username = "your_name";
$password = "your_password";
$hostname = "localhost"; 

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
  or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";
?>

然后它将从有效的序列表中“选择”,如果表中存在许可证,则表示它是有效的序列。

基本上,我试图找到解决此问题的好方法。 我最担心在哪里存储“用户名”、“密码”。基本上我只有一个用户,只有读取权限。

我想尽可能地隐藏用户名和密码,并希望以一种安全的方式进行处理。

“安全”是什么意思?只是一种防止未经授权的用户进入我的数据库的方法。

感谢大家的帮助。

【问题讨论】:

  • mysql_* functions旧且已弃用。请改用MYSQLIPDO
  • “谁”隐藏了连接细节?如果它在 PHP 块中,则不会以纯文本形式发送,除非页面未根据请求进行解析(您没有正确配置 PHP)。您实际上是在问如何保护您的网络服务器吗?
  • 感谢 Jared 提供的信息。那么你是说如果我使用 PHP(使用 MySqli)登录并且我的登录信息存储在该文件中,那么没有人能够看到它?如果是,那么好吧,我的答案已经解决了。如果不是,那么我想知道如何保护该信息。我在向“谁”隐瞒?那些因为我们不希望任何人看到所有有效序列而试图查看它的人,对吗?
  • 如果它被 PHP 解析,PHP 将输出的内容作为请求的内容发送到缓冲区。问题是,失败吗?你最好把不应该通过 URI/URL below 你的 web 根目录直接访问的东西放在 web 上,所以有人不能只是 http://www.yoursite.com/config.php 并且通过故障或错误接收源 PHP .但是......这并不意味着,仅仅因为他们获得了您的数据库用户/通行证,他们就可以临时查询您的数据库。我们正在讨论多个步骤,可能是入侵和流氓代码,而不仅仅是在浏览器中使用 URL 进行攻击。
  • 让我写一个简短的答案并指出我认为您需要的几点,看看您的用例(验证连续剧)。给我一分钟。

标签: c# php mysql apache licensing


【解决方案1】:

mysql 功能不再使用。我将为您提供解决方案的 mysqli 程序方法。我还将介绍一种保存密码的安全方法。

基本的mysqli连接和查询:

$queryString = "SELECT COUNT(*) FROM table WHERE userName = ? AND password=?";//not the question marks
//the question marks are used to bind our parameters/variables so the query string cannot be adjusted I believe? 
$DBH=mysqli_connect('local','user','pass');
mysqli_select_db($DBH,'database');
$query = mysqli_prepare($DBH,$queryString);
mysqli_bind_param($query,'ss',$username,$passwordHASH);//the second parameter declares the datatypes 
mysqli_execute($query);
//mysqli_bind_result($results); ||not needed in this situation but this is how you'd get results from the database
if(mysqli_fetch($query)){ //adding  && $results = 1 would insure there is only one record
    //username and password match
}
else{
    //error builder etc
}

现在对于您的密码,我建议您使用hmac_hash() 来提供保护。将密码插入数据库时​​,请确保它们是hmac_hash()ed,当您查询数据库时,这些密码会受到保护。

$passwordHASH = hash_hmac('sha512',$hashThis, '&R4nD0m^');

因此,如果用户名和密码等于$username$passwordHASH,则基本上如果COUNT(*) 返回1,则您的查询/获取将返回true。

但是说了这么多,你不能在 C# 中使用#include &lt;mysql.h&gt; mysql 库吗?

【讨论】:

  • 我认为您对 OP 的要求感到困惑。它是源文件中密码的相对安全性。这是 MySQL 用户密码,而不是应用密码。
  • @JaredFarrish 对!我看到他现在在做什么。 C# API 请求说服务器上的受保护文件不是更好的主意吗?
  • 这意味着什么?使用我的 C# 直接连接到我的数据库?跳过 PHP 文件?
  • @0010101010101010 - 你可以这样做。我不建议明确地进行许可证验证,但我知道之前已经完成了。
  • 是的,我想我也不想这样做。
【解决方案2】:

看看this answer 的第二个要点。本质上,您需要将 MySQL 连接详细信息放在文档根目录之外的配置文件中(例如 public_html/ 等),然后需要该文件。

【讨论】:

  • (虽然这取决于您的托管安排)
  • 是的,我以前看过。我是 PHP/MySQL 的新手,所以你能提供一个例子吗?如果我在文档根目录之外的文件上定义类似 $Password 的内容。我将如何阅读该信息?
  • @0010101010101010 - 您的服务器有一个根“web”目录,通常是htdocswwwroot,它(应该)在您的站点根目录中。将config.php 文件放在站点根目录 中,然后使用指向它的绝对路径,例如/etc/yoursite.com/config.php/etc/yoursite.com/wwwroot
  • 是的,把它放到上面你有 index.php 文件的目录中。
猜你喜欢
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 2014-03-15
  • 1970-01-01
  • 2021-05-24
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多