我的同事写了一些非常糟糕的东西.我们的老板希望能够从我们网站的后台编写任何SELECT查询,然后以CSV格式获得结果.
这些查询将由我们的PRODUCTION MySQL集群执行.此后台功能应拒绝任何非SELECT查询.
所以他想出了一个非常天真的解决方案.这是PHP代码:
function checkQuery()
{
$sQuery = trim($_POST['query']);
if (empty($sQuery))
return false;
$sCmd = substr($sQuery, 0, 6);
if (strtolower($sCmd) != 'select')
return errorDiv('Only SELECT queries are authorized');
return $sQuery;
}
Run Code Online (Sandbox Code Playgroud)
对于不了解PHP的人,此代码从SQL查询字符串的开头和结尾删除空格,然后获取6个第一个字符,将它们转换为小写字符,如果它不匹配(erf ...松散匹配) )'select',查询被拒绝.
它对我来说看起来很糟糕和令人作呕.我试图说服他创建至少另一个具有有限权限的MySQL用户,但他太懒了.
但是,我不能证明他有某种黑客是可能的.
他使用mysql_query()来运行查询字符串,此驱动程序一次拒绝多个查询.我找不到任何真正的漏洞,但我认为至少有50%的可能性会发生.
也许一些NUL char,或者一些阻碍utf-8字符可以做到这一点?
我正在构建一个在任何地方使用JSON的Web服务.
现在我需要一个HTTP方法来检索资源的属性(例如,像read-only,write,ACL这样的属性).看起来只有一种HTTP方法用于此目的:PROPFIND.
但是规范明确指示使用XML.
无论如何,使用带有JSON接口的动词是疯了吗?我也担心这PROPFIND是WebDAV扩展的一部分.
如果这是不行的,那么在面向JSON的Web服务中检索资源属性的推荐动词或推荐方法是什么?