Inno Setup подтверждение пароля через HTTP Post

Может ли кто-нибудь помочь с проверкой пароля в Inno Setup, у меня в настоящее время есть приведенный ниже код Inno Setup (найден на этом сайте), что я хотел бы сделать, это проверить пароль с паролем, хранящимся на сервере.

У меня есть страница PHP, содержащая код MySQL для проверки базы данных, и если пароль будет найден, он отправит ответ «Исправить»
Если пароль не найден, он возвращает ‘Пароль запрещен.

Я думаю, что проблема заключается в том, что установка не отправляет пароль в 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 !");
}

В конечном итоге я хотел бы отправить две части информации для проверки, но сначала мне бы хотелось, чтобы вышеописанное работало.

Буду очень признателен за любую помощь.

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-инъекция.

  4. Вы должны отправлять контрольную сумму пароля только в целях безопасности. Например. с использованием GetSHA1OfString.

    Побочным эффектом является то, что с контрольной суммой вам не нужно заботиться о кодировке URL, так как контрольная сумма не будет содержать никаких специальных символов.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]