链接点击验证& PHP中的Javascript函数?

时间:2016-01-19 12:19:34

标签: javascript php html security

在有人对安全问题发表评论之前,请不要打扰。

假设我有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函数中时,它将失败,因为我正在关闭引号。

我希望人们明白我在说什么。

如果有更好的方法,请告诉我。

3 个答案:

答案 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'] .' >