Может ли кто-нибудь помочь с проверкой пароля в 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 !");
}
В конечном итоге я хотел бы отправить две части информации для проверки, но сначала мне бы хотелось, чтобы вышеописанное работало.
Буду очень признателен за любую помощь.
Где имя хоста сервера? Как это может сработать, если вы не укажете, куда должен быть отправлен пароль?
WinHttpReq.Open('POST', 'https://www.example.com/website.php', false);
Вы отправляете пароль как есть. Пока вы указываете Content-Type
быть application/x-www-form-urlencoded
, Этот тип контента имеет определенный формат, который должен включать как минимум имя аргумента. Как еще PHP узнает, что поле названо password
?
WinHttpReq.Send('password=' + Password);
Но чтобы это работало правильно, вы также должны URL-кодировать пароль.
Проще было бы написать пароль как есть (как вы уже делаете) и прочитать необработанные данные запроса на стороне сервера:
$password = file_get_contents("php://input");
Вы действительно должны защитить свой серверный код от SQL-инъекция.
Вы должны отправлять контрольную сумму пароля только в целях безопасности. Например. с использованием GetSHA1OfString
.
Побочным эффектом является то, что с контрольной суммой вам не нужно заботиться о кодировке URL, так как контрольная сумма не будет содержать никаких специальных символов.
Других решений пока нет …