我的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>
当用户点击链接时,参数由第三方网站处理,该网站无缝地记录用户。
是否可以隐藏/屏蔽/伪装网址,以便用户在将参数传递到指定网站时看不到参数?
如果不是,你们会怎么做呢?我主要担心用户和密码params并需要隐藏它们。 (用户=亚当&安培;密码= pass1234)
我知道如何隐藏params的唯一方法是使用表单发布方法,但在这种情况下,它不是一个选项,因为我使用直接链接。
修改 对于那些一直建议使用POST方法的人,这不是一个选项,因为我没有使用表单而且接收网站不受我的控制。我从一个站点登录到另一个站点(第三方)网站
答案 0 :(得分:6)
如果您登录的页面由第三方控制,您唯一的选择是使用表格和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>
编辑:如果必须是链接并且可能需要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>
答案 1 :(得分:2)
请勿使用$ _GET传递任何个人,机密或关键数据。请改用$ _POST。
我不知道是什么阻止你使用$ _POST但是如果你仍然坚持使用它,请尝试md5()来编码这些数据并在必要时验证它们。您始终可以使用$ _SESSION传递$ _POST登录数据以供进一步使用。
答案 2 :(得分:1)
同意和加密/哈希方法(例如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)是您要创建的函数。
答案 3 :(得分:0)
登录应该通过POST完成,而不是GET。此外,敏感信息应通过HTTPS发送。
创建安全登录功能的过程可能会写完整本书,因此我建议您先阅读the definitive guide to web-based forms authentication。
如果您对安全性有进一步的具体问题,建议您在Security.SE处尝试。
答案 4 :(得分:0)
您无法使用GET方法执行此操作。如果您向我们提供更多信息,将会很有帮助。您是否试图从您的网站获取用户登录其他网站?在这种情况下,他们可能会有一个您可以检查的API。
答案 5 :(得分:0)
您可以为此功能生成令牌: 在您的数据库中生成随机字符串: 这是一个返回随机字符串
的函数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保存令牌并使用此功能,您可以轻松地为同一用户生成更多令牌以及轻松取消任何令牌。
答案 6 :(得分:0)
您可以将iframe与页面的URL一起使用,并对其进行样式设置以填充父级并删除边框。
@Override
public Object convertToDatabaseColumn(LocalDateTime locDateTime) {
return locDateTime == null ? null : Timestamp.valueOf(locDateTime);
}