【问题标题】:Input sanitizing, some questions (PHP)输入消毒,一些问题(PHP)
【发布时间】:2014-05-11 22:41:23
【问题描述】:

我从 youtube 视频中获得了这段代码,代码非常有用,但我想提高它的安全性:

function escape($string) {
          $str = trim($string);
          return htmlentities($strfinal, ENT_QUOTES, 'UTF-8'); 
      }

连同输入类:

class Input {

    public function exists($type = 'post') {
        switch ($type) {
            case 'post':
                return (!empty($_POST)) ? true : false;
            break;
            case 'get':
                return (!empty($_GET)) ? true : false;
            break;
        }
    }

    public static function get($item) {
        if(isset($_POST[$item])) {
            return $_POST[$item];
        } elseif(isset($_GET[$item])) {
            return $_GET[$item];
        }
        return '';
    }

}

它应该对我们至少必须调用输入类中的转义函数非常有用,这样即使我们“忘记”在我们的应用程序中调用它,也总是会检查每个输入字符串。

所以简而言之,有没有一种方法可以为大多数我们不想要的东西转义所有输入,而没有转义会使应用程序更慢?所以这两个脚本是相互结合的。

谢谢!

【问题讨论】:

  • 嗯,我现在认识到“所有”输入并不是字面上的意思,我应该更好地解释它,但我认为没有任何论坛准备好回答这个问题,所以我会耐心等待。无论如何,谢谢,伙计下次不要试图在视频上diss让你看起来很弱。

标签: php input escaping validating


【解决方案1】:

这个函数实际上并没有什么用处。
我想说的是,在整个 youtube 视频中也是如此。

有没有办法转义所有输入

是的,有。或者,更确切地说,曾经。 PHP 中有一个功能与用途完全相同,称为“魔术引号”。

它被从语言中删除,被证明完全不可靠

事实上,没有一组“不需要的”字符。我们用于输出的每种媒体,都需要它自己的、独特的集合,与其他媒体无关 - HTML、JS、SQL、电子邮件正文、JSON 字符串等,等等。

此外 - 每个媒体也没有单一的转义规则!比如说,对于浏览器来说,有不同的数据类型——url、HTML 代码、JS 代码——每一种都需要它自己的格式! SQL 也是如此 - 有字符串、有数字、有标识符 - 不能只为所有这些应用一个函数!

这就是为什么你应该在使用前格式化你的数据,

根据其中的媒介和数据角色。

虽然这种入口点格式在很久以前就被证明是不安全且无用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多