自作プラグイン/googlegadgets.inc.php
の編集
Top
/
自作プラグイン
/
googlegadgets.inc.php
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
Wikiを試したい方へ:
「この」Wikiは、
PukiWiki
のための公式Wikiです。
テスト書き込みなどは
お試しサイト
https://pukiwiki.osdn.jp/_trial/
をご利用ください
**googlegadgets.inc.php [#d02cee78] |RIGHT:100|LEFT:360|c |~サマリ|google gadget for your website の埋め込み| |~リビジョン|0.5| |~対応バージョン|1.4.x| |~投稿者|[[hnagoya@gmail.com]]| |~投稿日|&new{2006-10-06 (金) 14:18:28};| [[Google Gadgets For Your Webpage>http://www.google.com/ig/directory?synd=open]] を特定のページに埋め込みたかったのででっちあげてみたのですが、ようは生のHTMLコードをそのまま吐いているだけなので、引数チェックこれでいいのかな…セキュリティ面がよくわかりません。 <?php // googlegadgets.inc.php // License: GPL v2 // $Revision: 0.5 $ $Date: 2006-10-10 18:53:09+09 $ // ------------------------------------------------------------------- // Reference: http://www.google.com/ig/directory?synd=open // How to use: &googlegadgets(<script src="..."></script>); // ------------------------------------------------------------------- // 誰でもこのプラグインを使ってよければ A を、そうでなければ B を有効にする //define(PLUGIN_GOOGLEGADGETS_USE_SECURITYCHECK, FALSE); // A define(PLUGIN_GOOGLEGADGETS_USE_SECURITYCHECK, TRUE); // B function plugin_googlegadgets_init() { // nop } // B が有効の場合のアクセス権チェック // * pukiwiki がリードオンリー設定で運用されている // * 該当ページが凍結されている // * 該当ページが編集可能である // のいずれかが成立していれば OK function plugin_googlegadgets_securitycheck_ok() { global $vars; $page = $vars['page']; return (PKWK_READONLY || is_freeze($page) || edit_auth($page, TRUE, FALSE)); } function plugin_googlegadgets_convert() { return plugin_googlegadgets_sub(func_get_args()); } function plugin_googlegadgets_inline() { return plugin_googlegadgets_sub(func_get_args()); } function plugin_googlegadgets_action() { return plugin_googlegadgets_sub(func_get_args()); } function plugin_googlegadgets_sub($a) { global $vars; if (PLUGIN_GOOGLEGADGETS_USE_SECURITYCHECK && !plugin_googlegadgets_securitycheck_ok()) { return FALSE; } $m = array(); return preg_match('{^(<script\ src= "http://gmodules.com/ig/ifr\?(?:[\w:\./\+\-%&=]+)" ></script>)$}x', trim($a[0]), &$m) ? $m[0] : FALSE; } ?> - パッみたかんじ、XSS 脆弱性がありますね。(.*) で得る内容を htmlspecialchars などサニタイズしないといけないと思います。 -- &new{2006-10-06 (金) 23:38:05}; -- 単純に htmlspecialchars なんかでサニタイズしちゃうと安全ですけど意味ないURLになってしまうので…ちょっと正規表現でのチェック強くしてみましたが google gadgets のURLフォーマットの仕様ってどこかにありますかね。 -- &new{2006-10-07 (土) 23:45:13}; - しかし、許可HTML を制限してプラグインにHTMLを渡すというアプローチは珍しいですね。 -- &new{2006-10-06 (金) 23:39:02}; -- google gadgets は ''<script src="..."></script>'' というHTMLコードを使えと指示してくるので、できればそのままコピペして使いたいなあという希望がありまして。 -- &new{2006-10-07 (土) 23:51:37}; - うーむ、管理者しか使えないように、凍結ページでのみ発動とかした方がいいような気がする。 -- &new{2006-10-08 (日) 00:56:14}; -- ということで「発動」条件のチェックを入れてみたのですが、穴がありそうな… -- &new{2006-10-10 (火) 19:02:49}; #comment
**googlegadgets.inc.php [#d02cee78] |RIGHT:100|LEFT:360|c |~サマリ|google gadget for your website の埋め込み| |~リビジョン|0.5| |~対応バージョン|1.4.x| |~投稿者|[[hnagoya@gmail.com]]| |~投稿日|&new{2006-10-06 (金) 14:18:28};| [[Google Gadgets For Your Webpage>http://www.google.com/ig/directory?synd=open]] を特定のページに埋め込みたかったのででっちあげてみたのですが、ようは生のHTMLコードをそのまま吐いているだけなので、引数チェックこれでいいのかな…セキュリティ面がよくわかりません。 <?php // googlegadgets.inc.php // License: GPL v2 // $Revision: 0.5 $ $Date: 2006-10-10 18:53:09+09 $ // ------------------------------------------------------------------- // Reference: http://www.google.com/ig/directory?synd=open // How to use: &googlegadgets(<script src="..."></script>); // ------------------------------------------------------------------- // 誰でもこのプラグインを使ってよければ A を、そうでなければ B を有効にする //define(PLUGIN_GOOGLEGADGETS_USE_SECURITYCHECK, FALSE); // A define(PLUGIN_GOOGLEGADGETS_USE_SECURITYCHECK, TRUE); // B function plugin_googlegadgets_init() { // nop } // B が有効の場合のアクセス権チェック // * pukiwiki がリードオンリー設定で運用されている // * 該当ページが凍結されている // * 該当ページが編集可能である // のいずれかが成立していれば OK function plugin_googlegadgets_securitycheck_ok() { global $vars; $page = $vars['page']; return (PKWK_READONLY || is_freeze($page) || edit_auth($page, TRUE, FALSE)); } function plugin_googlegadgets_convert() { return plugin_googlegadgets_sub(func_get_args()); } function plugin_googlegadgets_inline() { return plugin_googlegadgets_sub(func_get_args()); } function plugin_googlegadgets_action() { return plugin_googlegadgets_sub(func_get_args()); } function plugin_googlegadgets_sub($a) { global $vars; if (PLUGIN_GOOGLEGADGETS_USE_SECURITYCHECK && !plugin_googlegadgets_securitycheck_ok()) { return FALSE; } $m = array(); return preg_match('{^(<script\ src= "http://gmodules.com/ig/ifr\?(?:[\w:\./\+\-%&=]+)" ></script>)$}x', trim($a[0]), &$m) ? $m[0] : FALSE; } ?> - パッみたかんじ、XSS 脆弱性がありますね。(.*) で得る内容を htmlspecialchars などサニタイズしないといけないと思います。 -- &new{2006-10-06 (金) 23:38:05}; -- 単純に htmlspecialchars なんかでサニタイズしちゃうと安全ですけど意味ないURLになってしまうので…ちょっと正規表現でのチェック強くしてみましたが google gadgets のURLフォーマットの仕様ってどこかにありますかね。 -- &new{2006-10-07 (土) 23:45:13}; - しかし、許可HTML を制限してプラグインにHTMLを渡すというアプローチは珍しいですね。 -- &new{2006-10-06 (金) 23:39:02}; -- google gadgets は ''<script src="..."></script>'' というHTMLコードを使えと指示してくるので、できればそのままコピペして使いたいなあという希望がありまして。 -- &new{2006-10-07 (土) 23:51:37}; - うーむ、管理者しか使えないように、凍結ページでのみ発動とかした方がいいような気がする。 -- &new{2006-10-08 (日) 00:56:14}; -- ということで「発動」条件のチェックを入れてみたのですが、穴がありそうな… -- &new{2006-10-10 (火) 19:02:49}; #comment
テキスト整形のルールを表示する