【问题标题】:Inno Setup password verification via HTTP Post通过 HTTP Post 进行 Inno Setup 密码验证
【发布时间】:2020-04-17 17:51:33
【问题描述】:

有人可以帮助验证 Inno Setup 中的密码吗,我目前有以下 Inno Setup 代码(可在此站点上找到),我想做的是根据服务器上保存的密码检查密码。

我有一个包含 MySQL 代码的 PHP 页面来检查数据库,如果找到密码,它将发送“正确”的响应 如果未找到密码,则返回“密码被拒绝”。

我认为问题在于设置未在WinHttpReq.Send(密码)部分发送密码。

我在下面包含了 Inno 设置代码和 PHP 代码。

如果我在代码中输入了真正的密码 WHERE password='genuine licence'我得到了正确的响应,安装继续。

function CheckPassword(Password: String): Boolean;
var
  returnvalue: boolean;
  WinHttpReq: Variant;
begin
  result := false;
  MsgBox (password, mbInformation, MB_OK);  //show entered password before send
  WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
  WinHttpReq.Open('POST', 'website.php', false);
  WinHttpReq.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  WinHttpReq.Send (Password);

  if WinHttpReq.ResponseText = 'Correct !' then
    result := true;

  if WinHttpReq.ResponseText = 'Access Denied !' then
    result := false;
end;    

还有 PHP 代码

$password = $_POST["password"];
$sql = "SELECT * FROM clients WHERE password='$password'";
if ($result=mysqli_query($conn,$sql))
{
    $rowcount=mysqli_num_rows($result);
    if($rowcount ==0)
    {
        die("Password Denied !");
    }
    if($rowcount==1)
    {
        die("Correct !");
    }

我最终想发送两条信息进行验证,但我想先完成上述工作。

非常感谢您的帮助。

【问题讨论】:

    标签: php inno-setup pascalscript


    【解决方案1】:
    1. 服务器主机名在哪里?如果您不指定密码应该发送到哪里,这怎么可能?

      WinHttpReq.Open('POST', 'https://www.example.com/website.php', false);
      
    2. 您按原样发送密码。当您将Content-Type 指定为application/x-www-form-urlencoded 时。此内容类型具有特定格式,至少必须包含参数名称。 PHP 怎么会知道该字段名为password

      WinHttpReq.Send('password=' + Password);
      

      但要使其正常工作,您还必须对密码进行 URL 编码。

      按原样(正如您已经在做的那样)编写密码并在服务器端读取原始请求数据可能更容易:

      $password = file_get_contents("php://input");
      
    3. 您确实需要保护您的服务器端代码免受SQL injection 的侵害。

    4. 为了安全起见,您应该发送密码校验和。例如。使用GetSHA1OfString

      副作用是使用校验和,您不必关心 URL 编码,因为校验和不会包含任何特殊字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      相关资源
      最近更新 更多