PHP Mysql CodeIgniter在非常奇怪的情况下将字符转换为符号

KDa*_*awg 1 php mysql codeigniter

PHP Mysql CodeIgniter在非常奇怪的情况下将字符转换为符号

  • 基于CodeIgniter的应用程序.
  • 已经运行了一年多.没问题.
  • 客户填写有关客户的表格.
  • 一个简单的修剪($ _ POST ['notes'])捕获textarea表单字段文本并保存到MySQL
  • 在PHP或JavaScript中没有报告错误
  • 前几天我注意到客户输入了一些文本,文本" () "中使用的括号替换为等效的" ()
  • 我想......"这很奇怪......我不记得为什么这些角色会被替换掉的原因."

我看一下......一天后......这是我的疯狂透露:


有问题的文字是逐字记录" 始终存档信用卡(我们不收取此客户的提货或退货) "

无论我在代码方面做了什么或改变了什么..我无法阻止PHP ......或者Javascript ......或者MySQL ......或者外星生物......或者无论是谁做到了 - 从转换" () "在文本中" ()".我尝试了很多东西,比如用人或上帝知道的所有方式清理字符串.在保存到数据库之前捕获字符串之前的字符串.转换将始终发生在保存到MySQL之前.我尝试以不同的形式和字段发布...每次都是同样的事情......无法阻止魔术转换为" () .

什么蝙蝠侠的名字在这个神奇的文本中导致这种情况发生?是魔法小精灵灰尘撒在godaddy服务器上运行??? 0_o .......

作为天才我0_0我决定一次从段落中删除一个单词.神奇地......随着森林中的所有生物聚集在一起 - 当我最终到达段落中的" 文件 " 这个词时,将其移除!像魔法一样 - " () "保持为" () "并且不会转换为" ()?!?!???!?!?:\如何?我只是从文本中删除了" 文件 " 这个词. ..这怎么会改变什么?什么是" 文件 " 这个词导致改变字符串的保存或转换方式?


好的 - 所以我在应用程序的任何一个表单字段中对此进行了测试.每一次,在任何字段中,如果您键入单词" file "后跟一个" ( "它将第一个" ( " 转换为" (;和下一个" )转换" ) " ;

所以..如果字符串是:

" 文件(任意数量的字符或文本)任何其他文本或字符 "

在帖子上,它将神秘地转换为:

" 提交(任意数量的字符或文本&#41任何其他文字或字符 "

从字符串中删除单词" file ",你会得到:

" (任意数量的字符或文字)任何其他文字或字符 "

外星生物归还被绑架的" () "


任何人都知道这里到底会发生什么?


  • 是什么造成的?

  • "文件"这个词是一个绊倒某种安全措施的关键词吗?将其整合为"file()"???


我不知道 :\

这是我见过的最奇怪的事情......除了那个时候我走进了爸爸妈妈0_o

任何帮助将不胜感激,我肯定会给你买啤酒:)


非常大的头颅 - (对于这种温柔的自我来说有很大的力量) - Noo-Noos这里的筹码暂停了这个问题为"关闭主题"大声笑......对上帝说实话,这些家伙是如此愚蠢.

所以 - 为了安抚stack-gestapo - 我将尝试编辑这个问题,以便它......"关于主题"??? 0_o ...什么都适合你哦,所以"国王"Stack Guys O_O - 太糟糕了,你永远不会发现这样的错误......也许有一天.;)


示例代码:

    <textarea name="notes">Always run credit card on file (we do not charge this customer for pick-up or return) blah blah</textarea>

<?php 

    if(isset($_POST['notes']){


        $this->db->where("ID = ".$_POST['ID']);
        $this->db->update('OWNER', $_POST['notes']);

    }
?>
Run Code Online (Sandbox Code Playgroud)

结果MySQL存储:
"总是运行信用卡存档,&#40;我们不收取此客户的接送或返回&#41;等等等等"

  • InnoDB - 输入文字utf8_general_ci

我不是在寻找一种方法来阻止它,或者清理它...我明确地问"它是什么原因造成的"

小智 6

/*
 * Sanitize naughty scripting elements
 *
 * Similar to above, only instead of looking for
 * tags it looks for PHP and JavaScript commands
 * that are disallowed.  Rather than removing the
 * code, it simply converts the parenthesis to entities
 * rendering the code un-executable.
 *
 * For example: eval('some code')
 * Becomes:     eval&#40;'some code'&#41;
 */
$str = preg_replace('#(alert|cmd|passthru|eval|exec|expression|system|fopen|fsockopen|file|file_get_contents|readfile|unlink)(\s*)\((.*?)\)#si', "\\1\\2&#40;\\3&#41;", $str);
Run Code Online (Sandbox Code Playgroud)

这是XSS Clean的一部分.(系统/核心/ Security.php)

如果您希望过滤器每次遇到POST或COOKIE数据时自动运行,您可以通过打开application/config/config.php文件并设置它来启用它:

$ config ['global_xss_filtering'] = TRUE;

https://www.codeigniter.com/user_guide/libraries/security.html