管理和保护由第三方添加到url的参数



让我们假设我们有这个网址:mywebsite.com/product.php?id=201

为了确保GET操作的安全,我检查id(它必须是数字(,并检查url中是否只有一个参数,我禁止添加这样的参数:

$whitelist = array('id');
if (test_fields($whitelist,$_GET)) {
}
function test_fields($wl, $dt) {
$result = True;
foreach ($dt as $key=>$item) {
if (!in_array($key, $wl)) {
$result = False;
}
else {$result = True;}
}
return $result;
}

问题是,当我们在facebook上分享这个链接时,默认情况下会添加参数,比如mywebsite.com/product.php?id=201&fbclid=DIwAR0kna40q

这会产生一个错误,因为我已经禁止添加参数

你知道怎么避开这个吗?

除此之外,我还有一个问题为了管理SEO方面,我使用页面的($_SERVER['REQUEST_uri'](检索uri,并基于uri从数据库中检索SEO元素(标题、描述、h1、索引等(但由于当facebook添加参数时,uri会发生变化,我在数据库中不再找到这个uri

你有办法解决这个问题吗?如果没有,有办法更好地管理这类页面的seo方面吗?

谢谢

保持简单就是方法。

如果你得到的参数像:

URI?id=1&id2=2&id3=3,并且您只需要id只需要这一个,如果还有10个也没关系。

1.标准

<?php
$GET_ID =  ($_GET['id']);
?>

2.如果不存在,设置一些

<?php
$GET_ID =  ($_GET['id'] ?? 'SETSOMETHING');
?>

3.如果不存在,请设置一些内容,并且您可以设置字符串长度的限制

<?php
$GET_ID =  substr(($_GET['id'] ?? 'SETSOMETHING'), 0, 30);
?>

4.如果不存在设置,请使用函数执行某些操作,然后可以设置字符串长度的限制

<?php
$GET_ID =  substr(MYFUNCTION($_GET['id'] ?? 'SETSOMETHING'), 0, 50);
?>

对于您的URI,请使用(php.net(中的phpparse_urlparse_url

只需选择您需要的。

<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url));
var_dump(parse_url($url, PHP_URL_SCHEME));
var_dump(parse_url($url, PHP_URL_USER));
var_dump(parse_url($url, PHP_URL_PASS));
var_dump(parse_url($url, PHP_URL_HOST));
var_dump(parse_url($url, PHP_URL_PORT));
var_dump(parse_url($url, PHP_URL_PATH));
var_dump(parse_url($url, PHP_URL_QUERY));
var_dump(parse_url($url, PHP_URL_FRAGMENT));
?>

最新更新