簡體   English   中英

PHP使用preg_match檢測URL中的標簽

[英]PHP detecting tags in url with preg_match

我正在嘗試通過添加以下內容在准備好的語句之上添加一層安全性:

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

當我添加到URL時,它什么也沒做

任何幫助表示贊賞!

您不需要驗證URL。 似乎您正在嘗試防止XSS-為此,您應確保轉義輸出,而不是驗證URL。 如果您真的想用url中的html阻止請求,則可以查看一些可以立即使用的解決方案,例如mod_security

第一個是您要匹配的標簽,第二個是包含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];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM