接收"不允许的关键字符" CodeIgniter中的错误

时间:2014-10-01 16:09:11

标签: php codeigniter

我收到以下消息:不允许的密钥字符和产生消息的字符串似乎是

__utmt_~42

我只是想加载页面而且对于我的生活无法弄清楚为什么会发生这种情况。它从无处开始。我怎样才能找到这个来源?

6 个答案:

答案 0 :(得分:6)

按照以下步骤

  1. /system/core/Input.php
  2. 上搜索 function _clean_input_keys
  3. 将此退出('禁止关键字符。'); 更新为退出('禁止关键字符。'。$ str);

答案 1 :(得分:5)

出现类似问题,因此,为了Google搜索结果:

__ utmt是一个cookie。更具体地说,是Google Analytics Cookie。 〜数字部分可能意味着它是副本/副本。可以把它想象成在Word文档中工作时存储在计算机上的word.doc~1文件。

首先,请检查网站上的Google Analytics代码,某处有重复内容吗? 我的问题通过改变这个重复的行来解决:

var pageTracker = _gat._getTracker("UA-1234567-89");
var pageTracker = _gat._getTracker("UA-1234567-89");

奇怪的是,文件总是有这个重复的代码行,就我的GIT而言。这可能是分析代码处理cookie的方式的变化......

哦,以及"禁止使用的关键角色"部分。这通常是一件好事,保护您的CI应用程序免受恶意。

它在system \ core \ Input.php文件中。

if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str)) {
    // there is no ~ in this regex pattern
    // You could add it, but you probably end up breaking other stuff ("/^[\w:~\/]+$/i")
    exit('Disallowed Key Characters');
}

答案 2 :(得分:2)

更改 system / core / Input.php

if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str))
                {
                      exit('Disallowed Key Characters.');
                }


to 

if ( ! preg_match("/^[a-z0-9:_\/-~]+$/i", $str))
                {
                      exit('Disallowed Key Characters.');
                }

答案 3 :(得分:1)

我只是要发表评论,但显然我没有足够的声誉。今天早上我遇到了类似的问题。它是由cookie(__ utmt_~1)引起的。我的网站确实创建了一个名为__utmt的cookie,但没有使用单个下划线,代字号和1.我怀疑__utmt_~1是原始cookie的副本,但我不确定它是如何创建的。但是 - 清除我的cookie会停止不允许的密钥字符消息。

答案 4 :(得分:0)

如果您在使用Google的验证码时遇到此问题 (名为g-recaptcha-response的POST变量) 在我的情况下,解决了在列出的字符末尾添加转义连字符的问题 像这样:

    if ( ! preg_match("/^[~a-z0-9:_\/-\|\-]+$/i", $str)){

到文件 system / core / Input.php

答案 5 :(得分:0)

尽管它的帖子很旧,但今天仍然有意义,因为该消息是含糊不清的,并很快使该网站屈服。

就我而言,在测试系统中,突然开始收到每条通过GET / POST获得用户输入的页面的消息。后来发现,这是我最近在php.ini中添加的附加过滤器的结果,该过滤器承诺将默认过滤器配置为与htmlspecialchars()完全一样。

public class HomeFragment extends Fragment {

    private HomeViewModel homeViewModel;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        homeViewModel =
                ViewModelProviders.of(this).get(HomeViewModel.class);
          final View root = inflater.inflate(R.layout.fragment_home, container, false);

        ViewPager viewPager = root.findViewById(R.id.view_pager);
        setupViewPager(viewPager);

        return root;

    }

    // Add Fragments to Tabs
    private void setupViewPager(ViewPager viewPager) {
        Adapter adapter = new Adapter(getChildFragmentManager());
        adapter.addFragment(new BalanceFragment1(), "Today");
        viewPager.setAdapter(adapter);
    }

    static class Adapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public Adapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

}

从php.ini文件中删除这些过滤器后,错误消失了。希望这对遇到相同问题的人有所帮助。