【发布时间】:2013-07-05 17:30:26
【问题描述】:
我正在做一个小项目,但我已经脑死了,所以我希望这里有人可以帮助我克服我的编码障碍。
我正在尝试使用 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
www.example.co.uk/location.php?loc=?php echo "I hacked your site"; ?> ---- 希望我的系统能够解除讨厌的代码注入
我将在下面发布我的代码,以便您查看我的内容。
<?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) {
}
}
?>
我想不出如果 ($percent >=90) 该怎么办。我知道我想退出循环并从我找到的前 90% 或更多匹配中获取结果,但我不是 100% 确定如何执行此操作。
还有什么是处理代码注入的最佳方法,例如 www.example.co.uk/location.php?loc=?php echo "I hacked your site"; ?>
【问题讨论】:
-
因为你没有调用
eval($loc),所以在里面放PHP语句是没有效果的。 -
我不明白这个问题。您回显的所有内容都将显示在页面上,您无需执行任何操作即可检索结果。
-
我会把回声拿出来,它在那里进行调试。我在脑海中看到的方式是使用 foreach 循环将数组中的每个字符串与传递到页面中的字符串进行比较。当百分比值为 90% 或出现时,我退出循环并从数组中获取匹配的值,然后使用该值加载我的页面内容。如果在 90% 范围内没有找到匹配项,那么我想将代码视为恶意代码