1

可能重复:
终极清洁/安全功能

在阅读了 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 使用准备好的语句,尽管我需要更多地阅读它们以完全了解它如何防止注入。

感谢您的时间。

4

3 回答 3

5

再一次,没有通用的转义函数可以神奇地使事情变得“安全”。

看到这个: https ://stackoverflow.com/a/7810880/362536

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

于 2012-06-12T19:56:38.927 回答
2

不,

对于 SQL 注入预防,您真的希望使用准备好的语句。这是一种更安全的方法,而不是转义引号。您还想使用htmlspecialchars()来转义 HTML 标签,而不是仅仅剥离它们,但这取决于您。

于 2012-06-12T19:56:59.203 回答
1

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

于 2012-06-12T20:00:30.123 回答