Character encoding 无论如何,停止接收可能的多字节字符串

Character encoding 无论如何,停止接收可能的多字节字符串,character-encoding,sql-injection,multibyte,Character Encoding,Sql Injection,Multibyte,每秒钟写一次。专家,我对传入的字符串非常怀疑-因为mysql\u real\u escape\u字符串可能被欺骗了 这个问题严格地说源于多字节字符集,比如GBK。如果用户输入不是多字节输入,那么,没有问题,没有问题,因为mysql\u real\u escape\u字符串对于SQL注入来说已经足够好了——只要您正确地进行基本数据类型验证 我不是说多字节是邪恶的。。。但是,如果您不必处理多字节的情况,那么就不要这样做。如果utf-8对你有效的话,坚持使用utf-8,并且一直保持utf-8状态。。。

每秒钟写一次。专家,我对传入的字符串非常怀疑-因为mysql\u real\u escape\u字符串可能被欺骗了

这个问题严格地说源于多字节字符集,比如GBK。如果用户输入不是多字节输入,那么,没有问题,没有问题,因为mysql\u real\u escape\u字符串对于SQL注入来说已经足够好了——只要您正确地进行基本数据类型验证

我不是说多字节是邪恶的。。。但是,如果您不必处理多字节的情况,那么就不要这样做。如果utf-8对你有效的话,坚持使用utf-8,并且一直保持utf-8状态。。。但问题是怎么做?因为,是用户通过向您发送一个非utf-8字符串和一个多字节字符串(如GBK)来启动该过程

那么,您如何确保能够成功可靠地拒绝该用户输入?从我的阅读/学习中,不可能知道传入用户字符串的字符集是什么。然后呢

换句话说,如何确保使用utf-8用户字符串?我这样问是因为所有的PHP过滤/净化功能都是为了处理utf-8输入而设计的,它们不知道如何处理多字节?正如本文所指出的,保护措施成为故障的原因


哦,请不要只说使用准备好的声明。。。意识到这个极好的选择,一切就绪

这篇精彩的、让人大开眼界的文章几乎是十年前写的,现在有点过时了。
从那时起,情况有所改善。
PHP获得了一个函数来控制mysql_real_escape_string(),并使其真正“考虑到连接的当前字符集”,如文档所述

问题严格地说不是源于多字节字符集(如GBK),而是源于字符集的错误解释。所以,你只需要告诉mysql,你使用的是什么字符集。因此,检测多字节字符串毫无意义

因此,只需使用设置适当的字符集,您将是安全的

这是


还请记住,并非每个多字节编码都易受攻击。utf-8相当安全。否则,我们今天就要经历无数次注射。

回答得太好了!这让我的一天。。。是否还需要确保包含这一行程序的php页面能够跨板访问<代码>标题('Content-type:text/html;charset=utf-8')或者更好,只需在php.ini中一次性执行此操作即可?mysql\u set\u charset()和
default\u charset=“utf-8”
处理不同的事情吗?互相支持?如果你有一个,你就不需要另一个了?HTTP和SQL确实是不同的东西。HTTP编码与tiopic无关。您必须使用header()或ini设置对其进行设置,以使站点正常工作,但这根本不会影响SQL安全性