小编cro*_*vel的帖子

MySQL - 检查查询的6个第一个字符以确保它是SELECT是否安全?

我的同事写了一些非常糟糕的东西.我们的老板希望能够从我们网站的后台编写任何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字符可以做到这一点?

php mysql sql

7
推荐指数
2
解决办法
200
查看次数

WebDAV PROPFIND方法是否应该与REST API中的JSON一起使用?

我正在构建一个在任何地方使用JSON的Web服务.

现在我需要一个HTTP方法来检索资源的属性(例如,像read-only,write,ACL这样的属性).看起来只有一种HTTP方法用于此目的:PROPFIND.

但是规范明确指示使用XML.

无论如何,使用带有JSON接口的动词是疯了吗?我也担心这PROPFIND是WebDAV扩展的一部分.

如果这是不行的,那么在面向JSON的Web服务中检索资源属性的推荐动词或推荐方法是什么?

rest json web-services

5
推荐指数
2
解决办法
1104
查看次数

标签 统计

json ×1

mysql ×1

php ×1

rest ×1

sql ×1

web-services ×1