PHP使用preg_match检测url中的标记

时间:2014-09-13 18:53:40

标签: php

我试图通过添加:

在我准备好的语句之上添加一层安全性
if (preg_match('#[@*,!$\'\-;:~`^|\(\\)\\{\\}\\[\\]]#i', $_SERVER['REQUEST_URI']) || strpos($_SERVER['REQUEST_URI'],'script')) { 
    echo 'Cannot do that';
}

我尝试在其中添加([\<])([^\>]{1,})*([\>]),但它无效。 我还尝试在strcmp($_SERVER['REQUEST_URI'], strip_tags($_SERVER['REQUEST_URI'])) != 0

时添加条件

当我加入网址时,它没有做任何事情

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

您不需要验证网址。您似乎正在尝试阻止XSS - 为此您应该确保转义输出,而不是验证URL。如果你真的想在网址中使用html阻止请求,那么你可以查看一些现成的解决方案,例如mod_security

答案 1 :(得分:1)

第一个是您要匹配的标记,第二个是包含XML或HTML的变量。再一次,这可以与cURL一起使用非常强大。

function get_tag( $tag, $xml ) {
  $tag = preg_quote($tag);
  preg_match_all('{<'.$tag.'[^>]*>(.*?)</'.$tag.'>.'}',
                   $xml,
                   $matches,
                   PREG_PATTERN_ORDER);

  return $matches[1];
}

将XHTML / XML标记与特定属性值匹配

此功能与前一个功能非常相似,但它允许您匹配具有特定属性的标签。例如,您可以轻松匹配。

function get_tag( $attr, $value, $xml, $tag=null ) {
  if( is_null($tag) )
    $tag = '\w+';
  else
    $tag = preg_quote($tag);

  $attr = preg_quote($attr);
  $value = preg_quote($value);

  $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*".
                "(['\"])$value\\2[^>]*>(.*?)<\/\\1>/"

  preg_match_all($tag_regex,
                 $xml,
                 $matches,
                 PREG_PATTERN_ORDER);

  return $matches[3];
}