我在PHP / HTML中有这样的链接:
<a href="http://search.mywebsite.com/login.aspx?checktype=uid&user=adam&password=pass1234&profile=dart&defaultdb=kts"> Log me into this website </a>
当用户单击链接时,参数由第三方网站处理,该网站无缝地将用户登录。
是否可以隐藏/掩盖/伪装URL,以便用户在仍将参数传递到指定站点时看不到参数?
如果没有,你们会怎么做?我主要担心用户和密码参数,并需要隐藏它们。 (user = adam&password = pass1234)
我知道如何隐藏参数的唯一方法是使用表单发布方法时,但是在这种情况下,这不是一种选择,因为我使用的是直接链接。
编辑:对于那些一直建议使用POST方法的人,这不是一个选择,因为我没有使用表格,并且接收网站不受控制。我正在从一个站点登录到另一个(第三方)站点]
您唯一的选择是使用表格和POST,如果您要登录的页面是由第三方控制的。
<form action="http://search.mywebsite.com/login.aspx" method="post">
<input type="hidden" name="checktype" value="uid" />
<input type="hidden" name="user" value="adam" />
<input type="hidden" name="password" value="pass1234" />
<input type="hidden" name="profile" value="dart" />
<input type="hidden" name="defaultdb" value="kts" />
<input type="submit" value="Log me into this website" />
</form>
EDIT:如果必须是链接,并且可能需要javascript,则可以使用javascript创建并提交form on the fly:
<a href="#" onclick="postLogin()">Log me into this website</a>
<script type="text/javascript">
function postLogin() {
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "http://search.mywebsite.com/login.aspx");
var params = {checktype: 'uid', user: 'adam', password: 'pass1234', profile: 'dart', defaultdb: 'kts'};
for(var key in params) {
if(params.hasOwnProperty(key)) {
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", key);
hiddenField.setAttribute("value", params[key]);
form.appendChild(hiddenField);
}
}
document.body.appendChild(form);
form.submit();
}
</script>
请勿使用$ _GET传递任何个人,机密或重要数据。请改用$ _POST。
我不知道是什么阻止了您使用$ _POST,但是如果您仍然坚持使用它,请尝试md5()对这些数据进行编码,并在必要时进行验证。您始终可以使用$ _SESSION传递$ _POST登录数据以供进一步使用。
同意并使用加密/哈希方法(例如MD5)。然后有一个重新处理页面,用于在调用所需脚本之前对消息进行解密。我正在用php ...只是为了向您展示这个想法。
例如www.mydomain.com/preporcessor.php?request=qouiapfiwe0i9qrr9qyy83r34rqejl
preprocessor.php(伪代码)
$request = $_REQUEST["request"];
$decrypted = mydecryptfunction($request);
//$decrypted will now contain: targetpage=login.php?username=abc&password=34453js&location=ABJ...
//Now you can route the parameters to login.php.
请注意,mydecryptfunction($ request)是您将创建的函数。
登录应该通过POST而非GET完成。此外,敏感细节应通过HTTPS发送。
创建安全登录功能的过程可能会写满一本书,因此,我建议您先阅读the definitive guide to web-based forms authentication。
如果您对安全性还有其他特定问题,建议您在Security.SE进行尝试。
您无法使用GET方法执行此操作。如果您向我们提供了更多信息,将很有帮助。您是否正在尝试从您的站点吸引用户登录另一个站点?在这种情况下,他们可能具有您可以检查的API。
您可以为此功能生成令牌:在您的数据库中生成一个随机字符串:这是一个返回随机字符串的函数
function gt_rnd_str($min=2,$max=9){
$str="";
while (strlen($str)<$max)
$str.=rtrim(base64_encode(md5(microtime())),"=");
return substr($str, 0, rand($min, $max));
}
现在使用用户名/ ID保存令牌,并使用它可以轻松为同一用户生成更多令牌,并轻松取消任何令牌。
您可以将iframe与页面的URL一起使用,并对其设置样式以填充父级并删除边框。
<!DOCTYPE html>
<html>
<body>
<iframe id="win" src="bookmarks_3_22_20.html" frameborder="0">
</iframe>
<script>
this.onload=function(){
document.getElementById("win").style="width:"+window.innerWidth+"px;height:"+window.innerHeight+"px;";
}
</script>
</body>
</html>