Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.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 url安全性_Php_Security_Url - Fatal编程技术网

Php url安全性

Php url安全性,php,security,url,Php,Security,Url,我有这个url,我想通过参数http://localhost/my_site/page.php?p=some-字符串 现在,我有一个函数,我用它来尝试使这个url安全。我想让它只包含字母、数字和-字符 function clear($url) { $url = trim($url); $url = preg_replace("/[^a-zA-Z0-9\-]/", "", $url); return $url; } $p = $_GET['p']; $p = clear(

我有这个url,我想通过参数
http://localhost/my_site/page.php?p=some-字符串

现在,我有一个函数,我用它来尝试使这个url安全。我想让它只包含字母、数字和-字符

function clear($url) {
    $url = trim($url);
    $url = preg_replace("/[^a-zA-Z0-9\-]/", "", $url);

    return $url;
}
$p = $_GET['p'];
$p = clear($p);
同样在htaccess中,我有这个规则

RewriteCond     %{REQUEST_FILENAME} !-f
RewriteRule     ^page/([A-Za-z0-9\-]+)/?$    page.php?p=$1   [L]

这足以保证url的安全吗?

.htaccess
会导致安全层不好,特别是如果有人部署在nginx而不是Apache上。没有任何东西阻止某人访问
/page.php?p='或1=1--有吗

后续的
clear()
函数可能足以去除任何不需要的字符,但这是否“安全”取决于在“清除”它之后,
$p
代码的其余部分会做什么

这个问题有两种变体,您可能也想问:

  • 如何确保用户输入不会导致安全漏洞?
    • 这是特定于领域的,您不会找到一个一刀切的通用解决方案
    • 如果您担心SQL注入,而不担心传递到URL的内容
    • 如果您担心XSS、LFI、RFI等,那么您也可以实现其他特定于域的安全控制
  • 如何确保用户输入有效。
    • 这可能会有帮助。它是一个开源输入过滤/验证库,用于处理结构化输入(多维数组,即
      $\u GET
      $\u POST
  • 例如,您可以这样做:

    <?php
    use ParagonIE\Ionizer\GeneralFilterContainer;
    use ParagonIE\Ionizer\Filter\{
        StringFilter,
        WhiteList
    };
    
    // Define properties to filter:
    $ic = new GeneralFilterContainer();
    $ic->addFilter(
            'page',
            (new StringFilter())
                ->setPattern('^[A-Za-z0-9_\-]{3,24}$')
        );
    
    // Invoke the filter container on the array to get the filtered result:
    try {
        // $get passed all of our filters.
        $get = $ic($_GET);
    } catch (\TypeError $ex) {
        // Invalid data provided.
    }
    

    您不需要达到这样的程度,因为GET变量“Safe”取决于用法和上下文,这一点本问题没有详细介绍。您想让url安全-针对什么?您所做的与安全性无关。@N.B.我有一个xml文件,需要参数从中检索数据。只是想确保人们不会弄乱url。htaccess只是为了让url“更好”。希望这有帮助这确实与安全有很大关系。这是一种有效且非常强大的url参数输入验证。虽然这本身并不能保证任何安全性,但它是一个很好的构建块,并且对注入型攻击非常有用。所以我觉得有这个过滤器很好。