有人可以帮助Inno Setup中的密码验证,我目前有以下的Inno安装代码(在本网站上找到),我想做的是检查密码与服务器上的密码。
我有一个包含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 !");
}
我最终希望发送两位信息进行验证,但我希望先完成上述工作。
非常感谢任何帮助。
答案 0 :(得分:4)
服务器主机名在哪里?如果你没有指定密码应该发送到哪里,这怎么可能有效呢?
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 injection保护服务器端代码。
您应该仅为了安全性而发送密码校验和。例如。使用GetSHA1OfString
。
副作用是使用校验和,您不必关心URL编码,因为校验和不包含任何特殊字符。