2014-01-16 41 views
-1

这是我第一篇文章在stackoverflow。 我要问几个简单:与PHP消毒输入,真的感谢的人谁可以帮助我:)PHP - 我应该在magic qotes关闭时清理字符串吗?

1)好吧,但是当我运行get_magic_quotes_gpc()返回false d问题。这意味着关闭了魔术引号。它是否正确?

2)我应该使用stripslashes(),htmlentities()& 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; 
} 

我想我已经发布我的代码正确遵守规则的计算器。如果没有抱歉。 :(

+2

根据您在进入该环境时带入的特定_context_处理数据。对任何数据只要使用stripslashes,htmlentities和strip_tags“无论如何”都只是无稽之谈。这是一个已经讨论了很多的话题,所以请做一些研究。 – CBroe

+0

你应该看看PHP的'filter'函数[here](http://www.php.net/manual/en/book.filter.php)。他们可以很费劲地使用,但提供了广泛的选项来消毒和验证输入。 – 2014-01-16 11:14:12

回答

0

在你的榜样,你知道输入一个数字,这将是最好简单地检查是否存在,而不是试图增加额外的过滤。

例如,

if(isset($_POST["f"])){ 
    $inFahrenhite = trim($_POST['f']); // remove any leading/trailing spaces 
    if (is_numeric($inFahrenhite)) $f = $_POST['f']; 
} 

上面的代码验证输入是数字的。既然你期待一些别的无效的,可以忽略。

其他问题。

  1. 是的,这意味着设置被关闭。
  2. 所有过滤器不是必需的。如果输入应该是一个数字,则不需要允许html值。使用http://www.php.net/manual/en/book.filter.php将是一个开始。
  3. 魔术引号只能转义某些字符。设置将被弃用,所以你应该避免使用它。
  4. 这些函数仅用于确保字符正确转义。例如,&将转换为&amp;。那里仍然有一个&,但它现在有不同的目的。
0

在那里有无穷的编写过时的PHP教程,基本上表明,清理是一个神奇的过程,它会自动修复您的数据,以避免任何潜在的漏洞。许多开发人员都认为这是一个事实,并且应用推荐的功能,甚至无需在文档中查找以找出他们的真正功能。因此,他们不仅编写易受攻击的应用程序,而且还会在此过程中破坏合法的用户数据。

我的建议是:

  1. 阅读使用首次任何函数的文档
  2. 了解你需要什么问题解决
  3. 想想功能是否做一些事情来解决这个问题

For instance

用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,而不是渲染。要做到这一点,你需要将每个<符号转换为&lt;

相关问题