这是我在stackoverflow上的第一篇文章。 我需要问一些简单的问题:与 PHP清理输入相关的D问题,非常感谢任何可以帮助我的人:)
1)好的,当我运行get_magic_quotes_gpc()时,它返回false。这意味着魔术引号被关闭。这是对的吗?
2)我应该使用stripslashes(),htmlentities()&amp ;;来清理任何用户输入的字符串。 strip_tags()什么时候关闭魔术引号?
3)即使我在输入\或其他字符等字符时关闭了魔术引号,我的程序也无法避免它们。那是为什么?
4)然后我修改了我的程序来调用一个函数来清理字符串,然后再处理它。即使字符串被清除,它仍然显示那些不需要的字符。 sanitizeString()函数
有什么问题以下是我的代码,与问题3相关) (该程序应该将华氏温度转换为摄氏温度,反之亦然)
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="TemperatureConverter.php" method="post">
<label>Fahrenheit</label><input type="text" name="f" size="10"/><br>
<label>Celsius</label><input type="text" name="c" size="10"/><br>
<input type="submit" name="submit" value="SUBMIT">
</form>
</body>
</html>
<?php
$f='';
$c='';
if(isset($_POST["f"])){
$f= sanitizeString($_POST["f"]);
}
if(isset($_POST["c"])){
$c=sanitizeString($_POST["c"]);
}
if($f!=""){
$c=(5/9)*($f-32);
echo $f.' Fahrenhite is equal to '.$c.' Celsius ';
}
else if($c!=""){
$f=$c*(9/5)+32;
echo $c.' Celsius is equal to '.$f.' Fahrenhite ';
}
function sanitizeString($str){
$str= stripslashes($str);
$str= htmlentities($str);
$str= strip_tags($str);
return $str;
}
我想我已经正确发布了我的代码,这符合stackoverflow的规则。如果没有抱歉。 :(
答案 0 :(得分:0)
在您的示例中,您知道输入是一个数字,最好只检查一下,而不是尝试添加其他过滤。
例如,
if(isset($_POST["f"])){
$inFahrenhite = trim($_POST['f']); // remove any leading/trailing spaces
if (is_numeric($inFahrenhite)) $f = $_POST['f'];
}
上面的代码验证输入是数字。由于您期望其他任何内容无效,因此可以忽略。
其他问题。
&
会转换为&
。那里还有&
,但它现在有不同的目的。答案 1 :(得分:0)
有无穷无尽的写得过时的PHP教程,基本上建议清理是一个神奇的过程,可以自动修复您的数据,以避免任何潜在的漏洞。许多开发人员接受这一事实并应用推荐的功能,甚至没有在文档中查找,以找出他们真正做的事情。因此,他们不仅编写易受攻击的应用程序,而且还在此过程中破坏了合法的用户数据。
我的建议:
strip_tags - 从字符串中删除HTML和PHP标记
示例#1 strip_tags()示例
<?php $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>'; echo strip_tags($text); echo "\n"; // Allow <p> and <a> echo strip_tags($text, '<p><a>'); ?>
你有一个温度转换工具。从华氏度中删除HTML标签是否合理?
但是假设您有一个网站发布HTML代码段。现在你有HTML,在它上面使用HTML函数是有意义的,不是吗?但是,为什么要从HTML片段中删除 HTML?你的网站没用!您需要解决的问题是将这些片段注入站点并将其显示为原始HTML而不是呈现。为此,您需要例如将每个<
符号转换为<
。