人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ユーザーが入力した内容のうち、URLの部分をリンクにするという機能をPHPで作ろうと考えています。

ここで、セキュリティ上、JavascriptをURLの中に入れられないようにしたいのですが、それも含めてどう処理すればいいでしょうか?
文章としてJavascriptを説明することも予想されるので、URLの中にねじ込まれなければいいと考えています。

●質問者: dingding
●カテゴリ:インターネット ウェブ制作
✍キーワード:JavaScript PHP URL ねじ セキュリティ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● いのくに
●27ポイント

はてなダイアリーXSS対策 がお役に立てれば幸いです。


また、PHP には parse_url という関数があり、

返り値

完全におかしな形式の URL については、parse_url() は FALSE を返し、E_WARNING を発生します。それ以外の場合は 連想配列が返され、その中には以下の要素(のうち少なくともひとつ)が含まれます。

とありますので、返り値を判断するのはいかがでしょうか?

◎質問者からの返答

ありがとうございます。

この関数は知りませんでした。ためになります。


2 ● worldtravel
●27ポイント

掲示板のような形で入力された内容を表示する事を前提に考えています。

これでいかがでしょうか。

$str = '<strong>テスト</strong>テストURLはhttp://xxx.xxxです。<a href="javascript:alert(?'test?');">クリック</a>';

$str = htmlspecialchars($str);
$str = preg_replace("/(https?:?/?/[?/?w?.???+-%&amp;=~]+)/i", "<a href=?"$1?">$1</a>", $str);

print $str;

http://xxx.xxx

◎質問者からの返答

ありがとうございます。

このプログラムでは、URLに

http://www.aaa.com/?a=%3Cscript%3alert('アラーと')%3C/script%3E

のようにjavascriptを含めたXSSなどに対応できているのでしょうか?


3 ● worldtravel
●26ポイント

すいません。

2の回答者です。

先程の回答では問題がありました。

htmlspecialcharsを使うと「&」「"」などの処理が面倒なのでこれではダメでしょうか。

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
</head>
<body>
<?
$str = '<a href="http://www.aaa.com/?a=%3Cscript%3alert(?'アラーと?')%3C/script%3E">クリック</a>';

$str = ereg_replace("<", '&lt;', $str);
$str = ereg_replace(">", '&gt;', $str);
$str = preg_replace("/(https?:?/?/[?/?w?.???+-=%~&]+)/i", '<a href="$1">$1</a>', $str);
print $str;

?>
</body>
</html>

[?/?w?.???+-=%~&]の「&」を半角に置き換えて試してください。

<a href="http://www.aaa.com/?a=%3Cscript%3alert('アラーと')%3C/script%3E">クリック</a>

こちらは、2の質問でdingdingさんが回答した所と表示と同じになります。

ちなみに

先程「&」が「&amp;」となってしまいましたので「&」は全角で書いています。

ご迷惑をおかけしました。

ポイントは不要です。

http://xxx.xxx

◎質問者からの返答

大変詳細な解説ありがとうございます。

試してみます。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ