我正在开发一个小项目,并且因脑死亡,所以我希望这里有人能够帮助我打败我的编码器块。退出foreach循环并检索结果
我试图创建一个页面使用php,根据什么(如果有的话)值传递给页面(位置)来更改其内容显示。我创建了一个安全列表阵列,我已经存储了不同的位置。首先我检查传递给安全列表的任何值,如果它匹配我显示一组内容。
如果它不匹配我正在运行相似性测试来检查它们是否可能是简单的错字,并且仍然可以将用户导航到页面我认为他们想要但这是我陷入困境的地方。
我希望有人可以键入
www.example.co.uk/location.php < ----加载通用位置页
www.example.co.uk/ location.php?loc = Bishops-Stortford < ----加载目标位置页面
www.example.co.uk/location.php?loc=Bishop-Stortford < ----加载目标位置尽管错误提供了90%或更多的匹配,但位置页面仍然存在
www.example.co.uk/location.php?loc=?php回声“我黑了你的网站”; ?> ----希望我的系统能够解除令人讨厌的代码注入问题
我会在下面发布我的代码,以便您能够看到我所得到的结果。
<?php
$loc = "";
$safelist = array("Bishops Stortford", "Braintree", "Chelmsford", "Dunmow", "Harlow", "Hertford", "Saffron Walden", "Sawbridgeworth", "Stansted", "Ware",
"Essex", "Hertfordshire");
if(isset($_GET["loc"])) {
/* Gets the value of loc if set, replaces hyphens with spaces and capitalises first letters of words converting the rest to lowercase. */
$loc = ucwords(strtolower(str_replace("-", " ", $_GET["loc"])));
}
/* Is word in safelist */
if (in_array($loc, $safelist)) {
/* Yes */
if (($loc == "Essex") or ($loc == "Hertfordshire")) {
$county = True;
} else {
$county = False;
}
if ($county == False) {
echo "\"" . $loc . "\" is not a county";
}else{
echo "\"" . $loc . "\" is a county";
}
} else {
/* No, Is string 90% similar to any entry within the safelist? */
foreach ($safelist as $safeword) {
similar_text($safeword, $loc, $percent);
echo $safeword . " " . $loc . " " . $percent . "<br />";
if ($percent >= 90) {
}
}
?>
我不知道该怎么办if($ percent> = 90)。我知道我想退出循环,并从我发现的第一次90%或更多的比赛中得到结果,但我不是100%确定如何做到这一点。
什么是最好的方式来处理代码注入,如www.example.co.uk/location.php?loc=?php回声“我砍了你的网站”; ?>
既然你不调用'eval($ loc)',将PHP语句放入它将不起作用。 – Barmar
我不明白这个问题。您所回复的所有内容都将显示在页面上,您无需执行任何操作即可检索结果。 – Barmar
我将把回声带出,在那里进行调试。我在头脑中看到的方式是使用foreach循环将数组中的每个字符串与传入页面的字符串进行比较。 当百分比值达到90%或出现时,我退出循环并从紧密匹配的数组中取值,然后使用该值加载我的页面内容。 如果在90%范围内找不到匹配项,那么我想处理代码就好像它的恶意 –