php - 验证获取cookie发布数据以确保utf-8编码?

时间:2015-12-17 01:40:39

标签: php mysql utf-8 character-encoding

我正在开发我的第一个需要多语言支持的网站,所以我一直在研究如何获得PHP / MySQL / Apache&浏览器合作。到目前为止一切都很好。

我甚至得到了它,以便它可以对付我投入的所有检查(从db,到db,php文件编码,apache adddefaultcharset,pdo连接字符串,php mb字符串函数,不同php的ini设置版本等等)。

但我必须将accept-charset="utf-8"添加到POST表单中。虽然我测试的所有浏览器实际上都与所提供页面的字符集相匹配,但它们也为用户提供了手动选择字符集的工具。虽然对于像我这样的人来说,使用utf8学习i18n是非常糟糕的,但我很高兴地报告我尝试的每个浏览器都尊重我的接受字符集请求

然而,这让我想到了.. 如果特定的浏览器DIDN' T 怎么办?然后是GET vars和cookie vars。如果另一种编码通过某种方式得到了什么(比抱歉更安全?)?

所以,我有一个问题。 :)

  • 是否有任何理由建议不要使用类似下面的伪代码的函数,仅用于,并将其注入全局include的顶部?

    //mb_detect_encoding detects the utf-8 with everything I try to throw at it, so it seems reliable
    //in pseudo-code, a recursive calling function like so...
    foreach (get, post, cookie AS superglobal) {
         foreach (superglobal AS key => value) {
            //if array, call self recursively, otherwise parse value
            if (mb_detect_encoding(value) != 'utf-8') {
                unset(superglobal[key]);
            }
         }
    }
    

这种方式,作为最后的手段,如果某种其他编码通过某种方式实现,这个函数会将数据输出。

我没有看到这种危害,因为这项功能不会因检查而产生很多动作。我还可以尝试utf8_encode(),然后在事情确实通过的情况下抛弃它。思考?可以有任何不好的事吗?我是偏执狂吗?

我只是要小心,因为我读过字符编码攻击是可能的。

编辑:我想我可以array_map()array_walk_recursive()或其他。实施并不重要;这个想法很重要。

0 个答案:

没有答案