Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用哈希将不受信任的输入转换为受信任的输入_Php_Mysql_Security - Fatal编程技术网

Php 使用哈希将不受信任的输入转换为受信任的输入

Php 使用哈希将不受信任的输入转换为受信任的输入,php,mysql,security,Php,Mysql,Security,向php页面发出get请求。其中一个键/值对被传递给该函数,getReport,该函数访问mysql数据库并返回json序列化字符串: function getReport($untrusted) { $tables = array( "day" => "p_day", "month" => "p_month" ... keys are 'untrusted', values are 'trusted'

向php页面发出
get
请求。其中一个键/值对被传递给该函数,
getReport
,该函数访问mysql数据库并返回json序列化字符串:

function getReport($untrusted) {
    $tables = array(
        "day"        => "p_day", 
        "month"      => "p_month"
        ... keys are 'untrusted', values are 'trusted' table names .....
    );

    $trusted = $tables[$untrusted];
    if(!$trusted) {
        ... error out ...
    }

    $query = "select * from " . $trusted;

    .... access mysql database, do some other stuff ...
}
问题:这是安全的吗?不受信任的输入仅用作查找以获取受信任的字符串。可信字符串用于生成查询


澄清:


这些数据是公开的。我担心SQL注入,或者用户访问连接参数或未在
$tables
中明确列出的表

我会说不。如果服务器得到的只是URL参数,那么任何拥有URL和哈希的人都不能浏览服务器。我想真正的答案需要更多的细节,返回什么,等等


通常,如果我想要安全访问,我会传递用户名/密码或令牌,这是用户身份验证。

我在演示文稿和书中描述了类似的方法。我称之为白名单地图,但想法是一样的

在我的示例中,我使用array_key_exists(),因为如果尝试访问不存在的散列键,将出现错误。另外,如果密钥不存在,在我的示例中,我选择默认值而不是出错。但这取决于您,根据应用程序的要求,任何一种操作都可能是正确的


您还应该将散列限制为仅由给定web请求访问的表列表。不要仅仅因为URL名称正确就让URL查询数据库中的任何表。这意味着您需要为每个实例创建一个不同的哈希数组,其中用户输入决定了SQL标识符(表或列名等)。

我会大胆地说是的,这是安全的。您正在控制可在SQL查询中使用的有效值,因此无法将意外的内容注入到查询中。就这么简单


显然,如果数据受到保护,那么除此之外,您还需要访问控制。

对不起,这是一个措辞拙劣的问题。数据是公开的——我担心SQL注入或用户访问连接参数或未在
$tables
中显式列出的表。。。更新问题。很高兴听到我的推理是正确的。对于SQL,再小心也不为过!