这对PHP中的用户输入是否足够安全

时间:2012-06-12 19:54:10

标签: php mysql security input escaping

  

可能重复:
  The ultimate clean/secure function

在阅读了PHP安全性之后,我觉得我编码的任何东西都是不安全的。因此,为了解决用户输入的安全问题,我创建了一个函数,允许我在任何使用情况下转义并删除用户输入。

我只想知道这实际上是否安全,是否可以让它更安全。这会阻止什么样的攻击?从我可以通过使用_GET告诉XSS,HTML输入和MYSQL注入会被阻止吗?

function _INPUT($name,$tag,$sql,$url)
{
if ($_SERVER['REQUEST_METHOD'] == 'GET')
    $filter = ($_GET[$name]);//Assign GET to filter variable

    if ($tag == true)//Remove all HTML, PHP and JAVASCRIPT tags
    {
        $filter = strip_tags($filter);
    }
    if ($sql == true)//If MYSQL escaping is enabled
    {
        $filter = mysql_real_escape_string($filter);
    }
    if ($url == true)//If URL encoding is enabled
    {
        $filter = urlencode($filter);
    }
    return $filter;     

}

$output = _INPUT('name',true,true,true);

我也将使用MYSQL的预备语句,虽然我需要更多地阅读它们以完全理解它如何防止注入。

感谢您的时间。

3 个答案:

答案 0 :(得分:6)

再一次,没有通用的逃避功能只是神奇地使事情变得“安全”。

请参阅:https://stackoverflow.com/a/7810880/362536

不同的转义方法用于不同的事情。您不能通过一堆应该在特定上下文中使用的函数来运行一堆数据。您正在创建垃圾数据,并且不会比您最初使用原始用户数据更安全。

答案 1 :(得分:2)

没有

对于SQL注入预防,您确实希望使用prepared statements。这是一种更安全的方法,而不是转义引号。您还希望使用htmlspecialchars()来转义HTML标记,而不是仅仅剥离它们,但这取决于您。

答案 2 :(得分:1)

这是一个永恒的问题,答案因所需用法而异:对于准备好的查询,我相信使用自己的变量系统并让它处理输入是100%安全的。对于HTML输出,剥离标签可能并不总是您想要的;此外,在黑名单中输入允许输入内容的白名单比黑名单更安全,因为你知道,黑客有幻想。对于URL输出,您的解决方案应该没问题,但请注意,其他一些平台可能会执行一些不同的URL编码(请参阅由Java标准库和iOS / Mac库编码的字符串URL之间的区别,即)。