Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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 URI变量可能是恶意的吗_Php_Security_Codeigniter_Uri_Xss - Fatal编程技术网

Php URI变量可能是恶意的吗

Php URI变量可能是恶意的吗,php,security,codeigniter,uri,xss,Php,Security,Codeigniter,Uri,Xss,给出以下简单代码: function loadthis ($var) { $id = $this->model->get_id($var); } 问题:是否可以通过URI变量传递任何恶意代码 场景:www.mydomain.com/mycontroller/loadthis/dosomethingreallybreach 额外信息: 我在模型上使用活动记录,所以我知道他们不能进行SQL注入 在本例中,我没有使用form_验证类(但我在其他地方对我的表单使用它)

给出以下简单代码:

 function loadthis ($var)
 {
      $id = $this->model->get_id($var);
 } 
问题:是否可以通过URI变量传递任何恶意代码

场景:www.mydomain.com/mycontroller/loadthis/dosomethingreallybreach

额外信息:

  • 我在模型上使用活动记录,所以我知道他们不能进行SQL注入
  • 在本例中,我没有使用form_验证类(但我在其他地方对我的表单使用它)
  • 我将URI字符限制为Codeigniter提供的默认字符

    $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
    

    • 对于允许的字符,您可以做的事情不多。。。您试图阻止的主要是任何人将MySQL或恶意脚本注入您的站点。总有一种可能性,但我认为你拥有的东西是相当安全的。要筛选的主要内容包括:

    • 引号、单引号和分号,因为它们可以用于MySQL注入攻击
    • HTML标记字符,如<或>,因为这些字符可用于注入恶意脚本

    • 这决不是一个完全全的清单。这些是你应该注意的主要事情。我强烈建议您在

      上阅读安全最佳实践,对于允许的字符,您可以做的不多。。。您试图阻止的主要是任何人将MySQL或恶意脚本注入您的站点。总有一种可能性,但我认为你拥有的东西是相当安全的。要筛选的主要内容包括:

    • 引号、单引号和分号,因为它们可以用于MySQL注入攻击
    • HTML标记字符,如<或>,因为这些字符可用于注入恶意脚本
    • 这决不是一个完全全的清单。这些是你应该注意的主要事情。我强烈建议您在

      是和否上阅读安全最佳实践

      “数据”本身并不危险,它只是数据。这取决于您对它所做的操作,如果数据包含您没有预料到的内容,则可能会产生不必要的后果。因此,对于通过URL接收的数据,或者实际上是从用户可以控制的地方接收的任何数据,您无法知道或保证该数据包含什么。因此,不要编写使用此数据的代码,如果该数据包含您没有预料到的内容,则这些代码将破坏或打开安全漏洞

      如果将内容未知的数据视为外来对象并进行相应处理,则该数据并不危险。如果你把它当作你知道里面有什么,即使你不知道,那是很危险的。是的,这是一个令人费解的答案

      是和否

      “数据”本身并不危险,它只是数据。这取决于您对它所做的操作,如果数据包含您没有预料到的内容,则可能会产生不必要的后果。因此,对于通过URL接收的数据,或者实际上是从用户可以控制的地方接收的任何数据,您无法知道或保证该数据包含什么。因此,不要编写使用此数据的代码,如果该数据包含您没有预料到的内容,则这些代码将破坏或打开安全漏洞


      如果将内容未知的数据视为外来对象并进行相应处理,则该数据并不危险。如果你把它当作你知道里面有什么,即使你不知道,那是很危险的。是的,这是一个令人费解的答案

      当然,这取决于代码。如果不分析所有的代码库,就永远不能说“它非常安全”。您的受限URL字符集似乎是合理的(如果它对您的应用程序足够的话)。然而,我可以想象至少有一个例子,如果用户将
      \\\\\\\
      放在URL中,输入可能是恶意的,在某些情况下,这可能会打开一个自定义文件(在Windows上)

      如果您只关心SQL注入,如果您有这样的代码:

      SELECT * FROM articles WHERE article_id = $id
      
      恶意用户可以将$id设置为
      0或1,如1
      ,从而通过您的受限字符集

      如果您忘记正确地转义(通常发生在生成的JavaScript代码中),XSS也可以这样做,但是这个例子很难想象

      无论如何,没有真正/完美/安全的方法来限制用户输入以获得安全性。避免XSS/SQL/whatever注入的唯一方法是检查所有代码,并确保无论在哪里使用输入或输出某个变量,都会根据使用的上下文对其进行正确转义。规则是不要限制输入,但要准备好可以包含任何内容


      如果输入是一个字符串,请准备好可以包含任何字符并对其进行处理。按原样将其保存到数据库中,并确保在保存过程中不会造成任何伤害。如果在构建SQL查询时需要转义它,请在那里转义它。如果需要将字符串(或其一部分)放入HTML输出,请正确转义它。当然,您需要非常小心,以确保在所有位置都能正确转义。

      当然,这取决于代码。如果不分析所有的代码库,就永远不能说“它非常安全”。您的受限URL字符集似乎是合理的(如果它对您的应用程序足够的话)。然而,我可以想象至少有一个例子,如果用户将
      \\\\\\\
      放在URL中,输入可能是恶意的,在某些情况下,这可能会打开一个自定义文件(在Windows上)

      如果您只关心SQL注入,如果您有这样的代码:

      SELECT * FROM articles WHERE article_id = $id
      
      恶意用户可以将$id设置为
      0或1,如1
      ,从而通过您的受限字符集

      如果您忘记正确地转义(通常发生在生成的JavaScript代码中),XSS也可以这样做,但是这个例子很难想象

      无论如何,没有真正/完美/安全的方法来限制用户输入以获得安全性。避免XSS/SQL/whatever注入的唯一方法是检查所有代码,并确保无论在哪里使用输入