Php 如何正确防止memcached“;协议注入;?

Php 如何正确防止memcached“;协议注入;?,php,python,security,memcached,libmemcached,Php,Python,Security,Memcached,Libmemcached,我发现,当我在键中输入\r\n以从memcached服务器获取值时,它可以用来注入memcached协议以运行另一个命令。下面是代码示例 在PHP中: <?php $m = new Memcached(); $m->addServer('localhost', 11211); $key = "foo\r\nset bar 0 10 10000\r\n"; echo $m->get($key); echo $m->get($key); // <- hang her

我发现,当我在键中输入
\r\n
以从memcached服务器获取值时,它可以用来注入memcached协议以运行另一个命令。下面是代码示例

在PHP中:

<?php
$m = new Memcached();
$m->addServer('localhost', 11211);

$key = "foo\r\nset bar 0 10 10000\r\n";

echo $m->get($key);
echo $m->get($key); // <- hang here
?>

在Python中:

import pylibmc

mc = pylibmc.Client(['127.0.0.1:11211'])

key = 'foo\r\nset bar 0 10 10000\r\n';
print mc.get(key)
print mc.get(key) # <- hang here
导入pylibmc
mc=pylibmc.Client(['127.0.0.1:11211'])
键='foo\r\n设置条0 10 10000\r\n';
打印mc.get(键)

打印mc.get(key)#对用户值(例如base64)进行编码,并使用结果作为密钥,或者使用二进制协议。

不让用户查询任意密钥如何?有时我需要使用slug作为密钥来获取文章内容。攻击者可以将
%0D%0A
放在URL中。然后过滤它。或者更确切地说,只允许用户给定的密钥由绝对无害的字符组成。