web-dev-qa-db-ja.com

URL用の組み込みデータ検証機能

私は人々が彼らのウェブサイトのURLを提出できるフロントエンドフォームを持っています。

私は実際にはWordPressのURLをPHP関数で検証していますが、これを可能にする組み込み関数があるかどうか知りたいですか。

これは私が実際に使用している機能です:

function validateURL($URL) {
    $v = "/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i";
    return (bool)preg_match($v, $URL);
}
2
roastedtoast

表示する必要があるURLにはesc_url( $url )を使用し、データベースにURLを送信する必要がある場合はesc_url_raw( $url )を使用します。

  • 最初のものは裸のアンパサンド&&に置き換えます。
  • 2番目は最初のラッパーです。アンパーサンドのエスケープを抑制するだけです。
  • 両方の機能はプロトコルをチェックします。リストについてはwp_allowed_protocols()を参照してください。'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'Gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp'したがって、javascript:alert("Hacked!");のようなURLは通過しません。

これらの関数は厳密にはバリデータではありません。彼らは値をサニタイズします。しかし、保存または表示するURLがあるときはいつでもそれらを使うべきです。

wp_validate_redirect( $location, $default )もあります。

最初の値が検証されない場合、$locationはここのURL、$defaultは代替URLです。そのdocブロックから:

リダイレクトで使用するためのURLを検証します。

絶対パスがある場合、$ locationが許可されたホストを使用しているかどうかを確認します。そのため、プラグインは許可されたホストをリストに設定したりリストから削除したりできます。

許可されたホストには、マルチサイトインストールのすべての(サブ)ドメインが含まれるわけではありません。理由はわからない。

5
fuxia

URLを検証する機能はありません。URL内で使用する文字列をサニタイズする機能だけです( sanitize_title )。

URLを検証する PHPフィルタ があります。 FILTER_VALIDATE_URL

3
Milo