这可能是一个非常简单的问题,但我不知道这里做错了什么。。。
为了解释清楚,我在下面举了一个非常简单的例子:
<ul>
<li><a href="test.php?link1=true">Link 1</a></li>
<li><a href="test.php?link2=true">Link 2</a></li>
<li><a href="test.php?link3=true">Link 3</a></li>
</ul>
<?php
if(isset($_GET['link1'])) {
if(($_GET['link1']) == 'true') {
echo 'This Is Link 1';
}
}
if(isset($_GET['link2'])) {
if(($_GET['link2']) == 'true') {
echo 'This Is Link 2';
}
}
if(isset($_GET['link3'])) {
if(($_GET['link3']) == 'true') {
echo 'This Is Link 3';
}
}
?>
这是一个test.php页面,在这里我为$_GET设置了3个不同的参数,并相应地显示内容,现在一切都很完美,唯一不明白的是如何阻止这种url,比如
如果用户点击链接1,url将为:
http://localhost/test.php?link1=true
这个url的输出是这是链接1
现在,如果我将此url更改为:
http://localhost/test.php?link3=true&link2=true&link1=true
我得到的输出是这是链接1这是链接2这是链接3
现在这在这里是可以的,但如果有人把这个和see的表格一个接一个地打出来,那就很烦人了,有什么办法可以阻止这种篡改吗?
使用elseif而不是单独的if语句。这样,只会执行一个(第一个条件为true)。
<?php
if(isset($_GET['link1'])) {
if(($_GET['link1']) == 'true') {
echo 'This Is Link 1';
}
} elseif(isset($_GET['link2'])) {
if(($_GET['link2']) == 'true') {
echo 'This Is Link 2';
}
} elseif(isset($_GET['link3'])) {
if(($_GET['link3']) == 'true') {
echo 'This Is Link 3';
}
}
?>
一种更稳健的方法可能是为每个链接使用相同的参数名称,但改变值。例如
<a href="test.php?link=link1">Link 1</a>
<a href="test.php?link=link2">Link 2</a>
<a href="test.php?link=link3">Link 3</a>
这样,即使有人在查询字符串中指定了多个值,也只能使用其中一个值。
您使用的是连续的if
语句,因此可以满足所有情况,并且可以响应所有输出。
if(isset($_GET['link3'])) {
if(($_GET['link3']) == 'true') {
echo 'This Is Link 3';
}
}
// Nothing stops the next if working here.
您可以查看switch语句并检查第一个语句,或者使用相同的?link=
并在每个链接中向其传递不同的数据,以便只满足一个if
语句。