Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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 Codeigniter和SOAP Web服务中rawurldecode的安全问题_Php_Security_Codeigniter_Soap_Dynamics Nav - Fatal编程技术网

Php Codeigniter和SOAP Web服务中rawurldecode的安全问题

Php Codeigniter和SOAP Web服务中rawurldecode的安全问题,php,security,codeigniter,soap,dynamics-nav,Php,Security,Codeigniter,Soap,Dynamics Nav,我们正在使用Microsoft Dynamics NAV SOAP Web服务获取网店的一些产品信息,为了获取这些信息,我们将发送诸如品牌、类型和型号等参数 这些参数在字符中变化很大,字符串可能如下所示: 型号:DSM 9510 XA+3709/VITALITY002.228.31 HÖGVÅRDIG 用户必须从动态生成的选择中选择品牌、类型和型号。在jQuery中,我们然后获取值,字符串替换Codeigniter URI中不允许的字符,然后在发送之前对其进行URL编码。像这样: var mod

我们正在使用Microsoft Dynamics NAV SOAP Web服务获取网店的一些产品信息,为了获取这些信息,我们将发送诸如
品牌、类型和型号等参数

这些参数在字符中变化很大,字符串可能如下所示:

型号:
DSM 9510 XA+
3709/VITALITY
002.228.31 HÖGVÅRDIG

用户必须从动态生成的选择中选择品牌、类型和型号。在jQuery中,我们然后获取值,字符串替换Codeigniter URI中不允许的字符,然后在发送之前对其进行URL编码。像这样:

var model            = $("select#model").val();
model                = model.replace(/\//g, '_');
model                = encodeURIComponent(model);

var url              = fab + '/' + type + '/'  + model + '/'  + produktnummer;
window.location.href = "categories/" + url;
然后在Codeigniter中的categories控制器中,我们将字符串替换为原来的禁止字符。然后对每个参数执行
rawurldecode($model)

我们现在有了所需的字符串发送到SOAP Web服务,以便返回正确的结果。在我们的类别控制器中,我们将执行(简化):

在fetch模型中,我们使用NTLMSoapClient连接到Dynamics NAV Web服务,如本文所述:

SoapClient会在发送请求时处理转义吗

这也许不是最聪明的解决方案,但我们想不出任何其他方法。因为我们需要这些URI来制作某种站点地图。因此,问题是:

在我们的应用程序中使用这些模糊的字符串,是否有更好、更安全的归档方法?

关于该店的一些额外信息:

对于webshop,我们扩展了Codeigniter购物车,不在站点处理任何支付,而是使用第三方支付网关来处理。我们只是将发货地址为serialized()的临时订单存储在db中,在从支付网关成功回调后,我们将订单标记为已付款,并将订单信息发送到Dynamics NAV webservice,在那里处理“真实”订单。该网店使用HTTPS。用户可以使用帐户查看他们的订单,订单也可以从Webservice获取,而不是从db获取。我们在Codeigniter()中使用Ion Auth进行身份验证


如果有什么不清楚的地方,我很乐意详细说明。谢谢大家!

一,。您确定需要解码吗?我对CodeIgniter了解不多,但总的来说,我希望有一条通往变量映射器的路径来为您进行解码(不仅仅是因为在许多情况下,web服务器本身已经完成了这一步骤——尽管在某些情况下,如在Windows上,Unicode字符是不可靠的)。另外,似乎您应该
编码URL路径中的每个组件,而不仅仅是模型。您用来与SOAP服务对话的代码在哪里?在我看来,对于NAV,您必须将参数字符串放回另一个路径,这意味着对每个路径调用
rawurlencode
。我不知道
htmlentities
将从何而来-您通常不会创建任何类型的HTML来与SOAP服务通信。(一般来说,
htmlspecialchars
更可取,这恰好适用于XML和HTML,因为它只产生与XML兼容的转义。)如果对于
http:…/x/a%20b
CI的输入路径,将字符串参数
a%20b
传递给函数,而不是
a b
我认为这是一个bug。对于通过
SOAPClient
发送的数据的适当编码,
SOAPClient
本身应该解决这个问题-您不必进行任何手动转义,因为您不是自己构建XML。
public function index($brand, $type, $model, $productnr = NULL)
{
    $model      = str_replace('_', '/', $model);
    $model      = rawurldecode($model);
    $categories = $this->fetch->get_categories($brand, $type, $model, $productnr);
}