链接点击验证与维护;Javascript函数中的PHP?
在任何人对安全问题发表评论之前,不要麻烦 假设我有一个链接点击验证与维护;Javascript函数中的PHP?,javascript,php,html,security,Javascript,Php,Html,Security,在任何人对安全问题发表评论之前,不要麻烦 假设我有一个index.php 在这个页面上有各种指向“home.php”的链接,但是它们都有不同的数据存储在href属性中。例如: 链接1:'home.php?data=1&country=uk' 链接2:'home.php?data=95&country=us' 用户只需输入www.website.com/home.php?data=*&country=*并根据自己的喜好在URL中填充数据即可 我想的是,如果我有一个函数,在单击其中一个链接时运行,它
index.php
在这个页面上有各种指向“home.php”的链接,但是它们都有不同的数据存储在href
属性中。例如:
链接1:'home.php?data=1&country=uk'
链接2:'home.php?data=95&country=us'
用户只需输入www.website.com/home.php?data=*&country=*
并根据自己的喜好在URL中填充数据即可
我想的是,如果我有一个函数,在单击其中一个链接时运行,它会在到达目的地之前向URL添加一个值。例如:
原始链接:www.website.com/home.php?data=1&country=uk
点击链接:www.website.com/home.php?data=1&country=uk&verify=a8c9gj113
我无法解决的是,在实际前往目的地之前,如何在单击链接时更改HTML中的href
数据
下面是我的代码(HTML处于从数据库提取数据的while循环中)
因此,对于函数中的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函数中时,它将失败,因为我正在关闭引号
我希望人们能理解我的意思
如果有更好的方法,请告诉我。我想您正在寻找类似
<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>
$(文档).ready(函数(){
$(“.ahref”)。单击(函数(){
var url=$(this.attr('href');
url=url+“mycode”;
window.location=url;
返回false;
})
})
我想您正在寻找类似
<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>
$(文档).ready(函数(){
$(“.ahref”)。单击(函数(){
var url=$(this.attr('href');
url=url+“mycode”;
window.location=url;
返回false;
})
})
用户可以很容易地键入….
意味着问题是关于阻止用户访问他们不应该看到的信息,即安全性。但是你的帖子一开始就提到了…关于安全性问题,不用麻烦了。
。因此,还远没有弄清楚你对答案的实际期望
当点击链接时,你说你想这样做,这意味着它需要在客户端用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']);
}
然而,这并不是阻止用户访问他们不应该访问的信息的适当方法-正确的方法是在请求返回到您的服务器时对其进行身份验证-我碰巧有上述代码的原因是,在一些特殊情况下,使用会话会产生更多的pr问题比它解决的要多。
用户可以轻松地键入….
意味着问题是关于阻止用户访问他们本不应该看到的信息,即安全性。但是你的帖子一开始就提到了…关于安全性问题,不用麻烦了。
。因此,还远没有弄清楚你对答案的实际期望。
<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'] .' >
当点击链接时,你说你想这样做,这意味着它需要在客户端用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']);
}
然而,这并不是阻止用户访问他们不应该访问的信息的适当方法-正确的方法是在请求返回到您的服务器时对其进行身份验证-我碰巧有上述代码的原因是,在一些特殊情况下,使用会话会产生更多的pr问题比它解决的多。
<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'] .' >
函数验证(url)
{
url=url+“某物”;
window.location=url;
返回false;
}
函数验证(url)
{
url=url+“某物”;
window.location=url;
返回false;
}
Check out:如果您担心用户会更改输入,那么您可以从中吸取教训,然后只给他们允许更改的输入(并在下一页加载/计算其余内容)例如,home.php?country=uk
,然后在home.php中,按国家代码从数据库中加载数据。此外,这是一个本质上的安全问题;唯一不提及安全性的方法是根本不回答。换句话说,是什么阻止我提出开发工具(从2016年开始,直接构建到所有主要浏览器中),更改HREF,然后调用verify()在修改后的属性上?没有什么可以阻止这一点,这使得JS端验证只对最不成熟的攻击者有用。Piskvor,我不知道为什么我没有想到这一点。我想我们都会遇到“编码器”阻塞,呃,干杯!还有“不提安全问题”,我的意思是让人们不要因为我使用了不安全的方法而抱怨我检查:如果你担心用户会更改输入,那么只给他们允许更改的输入(并在下一页加载/计算其余内容)。例如,home.php?country=uk
a