在有人对安全问题发表评论之前,请不要打扰。
假设我有index.php
。
在此页面上有各种指向'home.php'的链接,但它们都在href
属性中存储了不同的数据。 E.g:
链接1:'home.php?data = 1& country = uk'
链接2:'home.php?data = 95& country = us'
用户可以轻松输入www.website.com/home.php?data=*&country=*
并根据自己的喜好填充网址中的数据。
我在想的是,如果我有一个在点击其中一个链接时运行的功能,它会在到达目的地之前为URL添加一个值。 E.g:
原始链接:www.website.com/home.php?data=1&country=uk
点击链接:www.website.com/home.php?data=1&country=uk&verify=a8c9gj113
我无法解决的是在实际前往目的地之前,如何在点击链接时更改HTML中的href
数据。
我的代码如下(HTML是从数据库中提取数据的while循环)
<a href='home.php?data=". $results['id'] ."&country=". $results['country'] .' onclick='return verify();'>
功能:
function verify()
{
document.getElementById("verify").href="";
return true;
}
因此,对于函数中的HREF值,我将放置原始URL(home.php?data=". $results['id'] ."&country=". $results['country'] .
)加上一个额外的值。我怎么能这样做?
在PHP回声中,当你从变量或类似物中添加一个值时,你只需用引号结束回声,然后添加点,如下所示:
echo "I am the". $whatami ."person in the world";
JavaScript有这样的东西吗?当我将该PHP URL粘贴到.href=""
中的JavaScript函数中时,它将失败,因为我正在关闭引号。
我希望人们明白我在说什么。
如果有更好的方法,请告诉我。
答案 0 :(得分:2)
我认为你正在寻找像
这样的东西<a href='home.php?data=". $results['id'] ."&country=". $results['country'] .' class="ahref">
<script>
$(document).ready(function(){
$(".ahref").click(function(){
var url = $(this).attr('href');
url = url + "mycode";
window.location = url;
return false;
})
})
</script>
答案 1 :(得分:0)
Users could easily just type in....
意味着问题是阻止用户访问他们无法看到的信息,即安全性。但是您使用...about security issues, don't bother
发布了帖子。因此,在答案中你真正期望的还不清楚。
你说你想要这样做when the link is clicked
- 这意味着它需要在Javascript中实现客户端。您无法在客户端实施安全控制。
服务器端很容易。下面的代码使用静态salt作为哈希值,但是有更复杂的解决方案,例如使用会话ID会将重用限制为会话ID的生命周期:
/**
* add a set of parameers to a URL with a verifiable hash
*
* @param $args array - associative array of name/value pairs
* @param $base string - URL to add args to
* @return string - the completed URL
*/
function secure_url($args, $base)
{
$params='';
$join='';
ksort($args);
foreach($args as $k=>$v) {
$params.=$join . urlencode($k) . '=' . urlencode($v);
$join='&';
}
$chk=md5($params . SECURE_URL_HASH_SEED);
$params.=$join . 'chk=' . urlencode($chk);
$d=parse_url($base);
$out=$d['scheme'] ? $d['scheme'] . '://' : '';
$out.=($d['user'] . $d['password'])
? $d['user'] . ':' . $d['password'] . '@' : '';
$out.=$d['host'] . $d['path'];
$out.='?' . ($d['query'] ? $d['query'] . '&' . $params
: $params);
$out.=$d['fragment'] ? '#' . $d['fragment'] : '';
return $out;
}
/**
* validate arguments in the current URL
*
* @param array $args - associative array - only keys are used
* @return bool - true if valid
*/
function verify_url($url=false)
{
if ($url) {
$d=parse_url($url);
parse_str($d['query'],$src);
} else {
$src=$_GET;
}
ksort($args);
$paramlist='';
$join='';
foreach($args as $k=>$v) {
$paramlist.=$join . urlencode($k) . '=' . urlencode($src[$k]);
$join='&';
}
$chk=md5($paramlist . SECURE_URL_HASH_SEED);
$paramlist.="&chk=" . urlencode($chk);
return($chk===$src['chk']);
}
然而,这不是防止用户访问不应该访问的信息的适当方法 - 正确方式是在请求返回到您的服务器时对其进行身份验证 - 我碰巧有这样的原因上面的代码就是一些利基案例,其中使用会话会产生比解决的问题更多的问题。
答案 2 :(得分:0)
<script>
function verify(url)
{
url = url + "something";
window.location = url;
return false;
}
</script>
<a onclick='return verify(this.href);' href='home.php?data=". $results['id'] ."&country=". $results['country'] .' >