首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Las URI段为零(/0) ->错误DIsallowed字符

Las URI段为零(/0) ->错误DIsallowed字符
EN

Stack Overflow用户
提问于 2017-05-22 16:56:02
回答 1查看 99关注 0票数 0

我试图为这个问题找到一个解决方案,但都没有奏效。当我的REST api URI请求是,例如。https://serverip/meeting/userlist/0

我总是收到“您提交的URI包含不允许的字符”的错误消息。我甚至尝试在配置文件中将此参数保留为空:

$config‘’permitted_uri_chars‘= 'a-z 0-9~%.:_-+';

但是我得到了同样的错误。

不允许在URI末尾有一个0作为该段的唯一内容?因为我需要它来检索id = 0的用户。

非常感谢。

编辑-已解决:

又见面了,

最后我解决了这个问题。我发现很久以前我们在URI.php中注释了一个与UTF8编码相关的检查

如果(!空($str) &&!空($this->_permitted_uri_chars) &&!preg_match('/^'.$this->_permitted_uri_chars.'+$/i'.(UTF8_ENABLED?'u‘:''),$str))

我们只留下了第一个条件。我们有一些代码问题,在恢复该注释后似乎不会重现。现在,/0运行得很好。

所以很抱歉,最后这是一个与我们自己的修改有关的问题。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-05-23 17:35:48

$config['permitted_uri_chars']用作PCRE字符类模式。

其中的最后一个字符是破折号,它寻找破折号。但是,当破折号在两个字符之间时,它会触发范围搜索。所以..。当您在破折号后面附加+(加号)符号时,您会得到:

代码语言:javascript
复制
[_-+] // a range between underscore and plus in the ASCII table

你可能会想“那又怎样?0之前通过0-9已经被允许了”,你是正确的,但这不是问题所在。问题是加号的ASCII值比下划线小,并且范围不能反向工作,因此_-+是无效的,并触发PCRE编译失败,这反过来意味着整个检查失败,实际上不允许任何东西。

如果您启用了error_reporting和/或查看了错误日志,就会看到这一点。

如果你只将加号附加到默认模式--破折号不仅是最后一个字符,而且还用反斜杠进行转义--这种情况就不会发生,因为你会得到这样的结果:

代码语言:javascript
复制
[_\-+] // Underscore, dash and plus sign as individual characters; not a range

我猜你认为这是一个被允许的真正的角色,并删除了它。只需将其添加回来:

代码语言:javascript
复制
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-+';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44108649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档