はてなキーワード: Passwordとは
affected そういうシステム
● 動いているネットワークには触るな。
● 配線図を信用するな。
● 特権権限のパスワードが「password」の機器は誰もログインしていない。
● 冗長構成は動かない。
● 機器触っている時に「あっ。」って言う人は信用するな。
● しばらくアラームが来ない場合、何らかの問題が起きている。
● ググれ。
● 再起動は命がけでやれ。
● バックアップは戻らない。
● 素人は素直に申し出ろ。
● 手順書も読めない
● 手順書は読めるが作れない
● 手順書がないと作業できない
● だいたい手順書が間違っている
● 早業で障害対応したのに怒られる
● 飲み会の日は夕方障害発生
● コンフィグを保存し忘れる
● デフォルトオリジネートは消える
● 堅い名前をつけても誰も呼ばない
● MUAにこだわる
● キーボードにこだわる
● OSにこだわる
● そのスイッチのせいでSTP走って混乱
● 攻撃だそれフィルタと安易に言う奴が多い
● それはだいたい管理職
● 攻撃されている顧客には連絡が取れない
● DNSのことは知らない
● 経路交換は政治だ
● 落雷に敏感だ
● 生き字引みたいな人が居る
● その人のデスクはだいたい汚い
● 椅子の座り方をしらない
● 椅子を並べて寝るのが上手い
● ラックの間で昼寝する
● 光ケーブルの受光は目で確認しちゃう
● DC電源が怖い という話が怖い
● 低レイヤの事は以外としらない
● ケーブルは埋め殺す
● 埋め殺されたケーブルが多くてケーブル撤去できないのでそのケーブルも埋め殺す
Web屋のネタ帳( http://neta.ywcafe.net/ )様の
これからの「パスワード」の話をしよう( http://neta.ywcafe.net/001184.html )で
紹介されているパスワードのハッシュ化のバグについて突っ込んでみる
「1回ハッシュ化を解読できただけ、プレーンパスワードを入手することが可能である」
というものである。
問題の部分はここ
/** * 平文のパスワードをハッシュ&stretchするメソッドです。 * loop回数は1000としていますが、999でも1001でもお好みでどうぞ。 * ただしループ回数は処理時間に直結しますのでほどほどの数値で。 */ private static final String hashAndStretch(String plainPasswd, String salt) { int loop = 1000; String hashedPasswd = ""; for (int i = 0; i < loop; i++) { hashedPasswd = DigestUtils.sha256Hex(hashedPasswd + plainPasswd + salt); } return hashedPasswd; }
<凡例>
ソルト:SSSSSSSS
<トレース>
XXXXXXXX ← DigestUtils.sha256Hex("YYYYYYYY" + "PASSWORD" + "SSSSSSSS")
クラッカーがXXXXXXXXXのハッシュ値を解析し、元の文字列が「YYYYYYYYPASSWORDSSSSSSSS"」と判明したとする。
この時点で元文字列の中にプレーンパスワードが含まれていることになる。
また、ハッシュ化された文字列には「0123456789abcdef」の文字しか含まれておらず、
「それ以外の文字が含まれていた場合容易にプレーンパスワードではないか」
一般的なパスワードには少なからず「0123456789abcdef」以外の文字が含まれているだろうし、
上記のことをふまえてプログラムを修正すると。。
/** * 平文のパスワードをハッシュ&stretchするメソッドです。 * loop回数は1000としていますが、999でも1001でもお好みでどうぞ。 * ただしループ回数は処理時間に直結しますのでほどほどの数値で。 */ private static final String hashAndStretch(String plainPasswd, String salt) { int loop = 1000; String hashedPasswd = DigestUtils.sha256Hex(plainPasswd + salt);; for (int i = 0; i < loop; i++) { hashedPasswd = DigestUtils.sha256Hex(hashedPasswd + DigestUtils.sha256Hex(salt + i)); } return hashedPasswd; }
HTMLはわかるけど、サーバーサイドはお遊びでphpを触ったぐらいだったので、会員制でデータをためこむサイト作りに初めて挑戦した。
今回重視したのは、「いかに個人情報をお漏らししないようにして、万が一漏らしても被害を少なくするか」ということ。
世の中、有償サービスでもパスワードを平文で保存してるサービスが意外と多いらしいので、流出した時のリスクを少しでも減らせる対策として書きます。
サーバー:ロケットネットのキャンペーンにでレンタルサーバ年1000円ポッキリプラン クライアント側の処理:HTML+CSS+jQuery(とプラグインもろもろ) サーバ側の処理:PHP Webサーバー:Apache データベース:MySQL
俺も巻き込まれたところでは、サミータウンがメールアドレスとパスワードセットでお漏らししてお詫びに1ヶ月無料なにそれこわい。
サミータウンだけならまだいいけど、メアドとパスワードを他のサービスで共通化して使ってる情弱なので、
共通化してメアドとパスワードをどこかのサービスが一箇所でも漏らすと、ヤフオクID乗っ取り事件みたいなことになる。
http://internet.watch.impress.co.jp/cda/news/2008/09/26/20967.html
俺だってできれば人様のメールアドレスとパスワードとか預かりたくない。
万が一、肉親のメールドレスを発見してパスワードにrapemeとか入ってたら明日からどういう顔すればいいかわからない。
ググってみてもどこにも情報のってない。うーん困った。ダメもとで「個人情報ってどうやって保存したらいいんだろう。。。」
って、twitterでつぶやいたら、「住所とかは可逆暗号化でいいけど、パスワードはハッシュで不可逆化しないとだめだよ!」
「住所とかは可逆暗号化でいいけど、パスワードはハッシュで不可逆化しないとだめだよ!」
何のことかわからなったので、調べてみると、
・ハッシュ=ハッシュ値を使った、元のデータに戻せない暗号化方式
うーん。。。よくわからん。。。
電話番号とか住所は、第三者が使用する情報なので、可逆が必要。パスワードは、認証にしか使わないので、
ハッシュ値の結果が一致すれば元のデータがわからなくてもOK、という方式なのでこういった暗号の使い分けをする。
●可逆暗号のイメージ(もとにもどせる) 暗号化キーは開発者が指定する。 090-xxxx-xxxx →(暗号化)→ !'&amp;%($% →(復号化)→ 090-xxxx-xxxx ●ハッシュのイメージ(もとにもどせない) 登録password(DBに保存)→(ハッシュ値抽出)→!"$#'$#=" ログインpassword →(ハッシュ値抽出)→!"$#'$#=" ※二つのハッシュ値が合っていれば、パスワード一致として認証する。
今回はMySQLの関数で実現した。encode関数で暗号化して、decode関数でもとに戻す。
例えばtel_noという項目だけあるテーブルがあるとすると、
//データベースに保存する時 insert into テーブル名 (tel_no) values (encode(tel_no,'暗号化キー')); //データベースから取得する時 select decode(tel_no,'暗号化キー') from テーブル名;
これで、データベース格納時は暗号化(バイナリ化)されて、データベースから取り出してHTML表示する時に復号化はされる。
<ユーザ登録時>
$password=(フォームから取得) $hash=hash('sha512',$password) //ユーザ登録時は、ここで生成した$hashをデータベースにぶっこむ。
ユーザ認証時は、入力されたパスワードと、データベースのパスワードが一致するかチェック。
//フォームから入力されたパスワード $input_password=(フォームから取得) $input_hash=hash('sha512',$input_password); //MySQLに保存されたパスワードを取得(略) $db_hash==(データベースから取得) //判定 if($input_hash==$db_hash) echo 'ログインしますよ!'; //ここにログイン処理を書く else die('メアドとパスワードがあってないよ!');
これでもしSQLインジェクションとかでデータが流出しても、ハッシュ暗号のパスワードに関してはまず解析されないはず。。。
可逆暗号のデータもphp側の暗号化キーが盗まれない限りバレない。。。はず。。。
何でもかんでも暗号化するとコードが煩雑になるし、パフォーマンスにも影響でそうなので、
住所データの都道府県とか、漏れても良いような情報は暗号化しませんでした!!
個人情報保護法 2条による定義 「個人情報」とは、生存する個人に関する情報であって、当該情報に含まれる氏名、生年月日その他の記述等により特定の個人を識別することができるもの(他の情報と容易に照合することができ、それにより特定の個人を識別することができることとなるものを含む。)をいう。
これで、もし漏れても、俺、ウンコ漏らして臭いけど、パンツから出てないからいいよね?というレベルにはなった。はず。
万が一漏れても大丈夫!と書いたけど、そもそも漏らすなというお話になる。色々調べた結果、以下の対策をほどこした。
・当初jQuery側でSQL組み立ててPHPに渡してたので、これだと任意のSQLが実行できて漏らし放題なのでやめる。
・GETとかPOSTでDBに渡すパラメータを扱ってる場合、ちゃんとエスケープする。
例えばログイン認証するPHPで、GETメソッドでフォームからデータを取得するような場合、
$id=$_GET['id'] $pwd=$_GET['pwd'] $sql="select * from ユーザーテーブル where uid='$id' and pwd='$pwd'
とかやってると、login.php?id=admin'&pwd=' OR '1'='1とかパラメータを渡されるとあら不思議!
select *from ユーザテーブル where uid='root' and pwd='' or 1=1
で、誰でもログイン出来ちゃう!ので、mysql_real_escape_stringでエスケープしたり、渡されたパラメータが想定した値かどうか(例えば数値かどうか、とか)のチェックをいれたりする。
・保存するデータにタグやJavascriptを埋め込まれないように、保存されたデータを出力する場合はPHP側でhtmlspecialchars関数使ってエスケープするようにする。
こんな感じでお漏らし対策をした。間違いがあったら教えて欲しい。
ちなみに出来上がったサイトはこれ。
結構苦労したので健忘録として。。
環境は以下のとおり
yum install mysql-server
/etc/init.d/mysqld start
mysql_secure_installation
jruby -S gem install rails jruby -S gem install warbler jruby -S gem install activerecord-jdbc-adapter jruby -S gem install activerecord-jdbcmysql-adapter jruby -S gem install jdbc-mysql
mysql -u root -p mysql> create database redmine character set utf8; mysql> grant all privileges on redmine.* to 'redmine'@'localhost' identified by 'redmine'; mysql> exit
(任意の場所にRedmineを解凍して、解凍先のディレクトリに移動した後)
cp config/database.yml.example config/database.yml vi config/database.yml
database.yml
production: adapter: jdbcmysql database: redmine host: localhost username: redmine password: redmine encoding: utf8 #development: # # #test: # #
後のwarbleでのエラーを防ぐため、developmentとtestをコメントアウト
jruby -S rake generate_session_store jruby -S rake db:migrate RAILS_ENV=production jruby -S rake load_default_data RAILS_ENV=production
script/serverで起動し、http://localhost:3000 にアクセスして正常に動作するか確認する
jruby script/server -e production
vi config/environments/production.rb config.logger = Logger.new(config.log_path) config.logger.level = Logger::INFO
warble.rbを生成
jruby -S warble config
warble.rbを修正
vi config/warble.rb config.dirs = %w(app config lib log vendor tmp extra files lang) config.gems = ["jdbc-mysql", "activerecord-jdbcmysql-adapter", "activerecord-jdbc-adapter"] config.gems["rails"] = "2.3.5" config.gems["rack"] = "1.0.1" config.webxml.rails.env = "production"
jruby -S warble
できたwarファイルをTomcatに配置して、Tomcatを起動する
mv redmine-0.9.3.war /usr/local/tomcat/webapps/redmine.war /usr/local/tomcat/bin/startup.sh
warblerのバグ(?)でwarに入らないファイルをコピーして入れる
cp vendor/gems/rubytree-0.5.2/.specification /usr/local/tomcat/webapps/redmine/WEB-INF/vendor/gems/rubytree-0.5.2
javascript:void(prompt("Password",Math.random().toString(36).slice(-8)));
Mac OSX 10.5.6にて。
GnuCash とかいう家計簿ソフトをインストールしてみたわけだが、起動しない。
どうしたものか。
[***:~] ***% sudo port install gnucash Password: ---> Fetching gnucash ---> Verifying checksum(s) for gnucash ---> Extracting gnucash ---> Applying patches to gnucash ---> Configuring gnucash ---> Building gnucash ---> Staging gnucash into destroot ---> Installing gnucash @2.2.9_0 ---> Activating gnucash @2.2.9_0 ---> Cleaning gnucash [***:~] ***% gnucash gnc.bin-Message: main: binreloc relocation support was disabled at configure time. Xlib: extension "RANDR" missing on display "/tmp/launch-6BB0ZT/:0". The application 'gnucash' lost its connection to the display /tmp/launch-6BB0ZT/:0; most likely the X server was shut down or you killed/destroyed the application.
[3:39] *** えがちゃんが奥野肛門括約筋, oquno, ryo_GRID, ryuzi_kambeを追加しました ***
[3:39] UK - Yuki Akamatsu: エモオフなめんな
[3:39] *** えがちゃんが=ujihisa24を追加しました ***
[3:40] *** satoru.netが、会話のタイトルを"えがえがチャット?"に変更しました ***
[3:41] *** OKが、会話のタイトルを""に変更しました ***
[3:41] OK: みす
[3:41] *** えがちゃんがhayamiz, hogelog, nkztmktを追加しました ***
[3:41] *** Mishoが、会話のタイトルを"<<ここをクリックしてチャットのタイトルを設定>>"に変更しました ***
[3:42] *** えがちゃんが、会話のタイトルを"えがえがチャット"に変更しました ***
[3:42] nommy/asuinim/L4RK: えっと、これは何がしたいんです?
[3:42] Misho: 世界の果てだよ
[3:42] satoru.net: えがちゃんが 主催者になりたいのだろうか。。
[3:42] Misho: はじめましてのひとははじめまして!みしょです!!!!
[3:42] えがちゃん: 正解>misho
[3:43] えがちゃん: 今日ここに集まってもらったメンバーに
[3:43] satoru.net: はじめましてー>みしょ様
[3:43] えがちゃん: 大事なお知らせがあります
[3:43] UK - Yuki Akamatsu: 結婚すんの?
[3:43] UK - Yuki Akamatsu: おめでとう
[3:43] えがちゃん: えー、発表していいですか?>satoruさん
[3:43] Misho: おめでとう!
[3:43] えがちゃん: うん、ありがとう
[3:43] OK: 江上自己顕示欲旺盛のクソ
[3:43] satoru.net: しらんしおれw
[3:43] えがちゃん: www
[3:43] OK: 偉くなりたいだけ
[3:43] OK: 謙虚さが見えない
[3:43] えがちゃん: エー実は僕、
[3:43] OK: はい
[3:43] えがちゃん: (まずここでのチャットは非公開でお願いしますね)
[3:43] えがちゃん: まず、2つありまして1つは
[3:43] UK - Yuki Akamatsu: 学習したのか
[3:44] OK: はい
[3:44] nommy/asuinim/L4RK: それアレ?上島?
[3:44] えがちゃん: 今までのはてなでの流れにつきましてです
[3:44] satoru.net: 学習機能ついてたんだー えがちゃんて 感動
[3:44] Misho: わかった!!絶対に公開しない!!!
[3:44] Misho: おまえらも絶対に公開するんじゃないぞ!!!!
[3:44] nommy/asuinim/L4RK: よし、みしょ、公開するなよ!
[3:44] Misho: いいな!!!ぜったいだぞ!!!!!!
[3:44] えがちゃん: なぜ、今までこういったことをはてなでやってきかた
[3:44] nommy/asuinim/L4RK: 絶対にだぞ!
[3:44] Misho: おう!!!ぜったいしない!!!!!
[3:44] えがちゃん: すべてをお話、、、
[3:44] えがちゃん: すればいいですか?
[3:44] えがちゃん: まぁそれはいいか
[3:44] UK - Yuki Akamatsu: いや
[3:44] nommy/asuinim/L4RK: OKもするなよ!公開するなよ!
[3:44] えがちゃん: んで、2つ目が
[3:44] えがちゃん: では、発表します!
[3:44] えがちゃん: えー、、、緊張しますね
[3:44] えがちゃん: では、いきます
[3:45] えがちゃん: 「週に1つサービスを作ろうの会」発足
[3:45] えがちゃん: をここに表明いたします。
[3:45] UK - Yuki Akamatsu: ほい
[3:45] えがちゃん: 皆さんは、メンバーでございます。
[3:45] えがちゃん: 一緒に、気づきあげましょう。
[3:45] えがちゃん: 僕が、会長です。
[3:45] UK - Yuki Akamatsu: 拒否権はあるんですか
[3:45] yuiseki: ^^;
[3:45] えがちゃん: うーん、一旦今日は表明だけなので
[3:45] nommy/asuinim/L4RK: 後のともだち ですね
[3:45] えがちゃん: ない
[3:45] えがちゃん: >拒否権
[3:45] UK - Yuki Akamatsu: ないwwww
[3:45] OK: 映画化決定!!!!!!!
[3:46] えがちゃん: 一応、実は計画があります
[3:46] えがちゃん: もちろん、ばかみたいに今までサイトを作ってきて
[3:46] OK: マルチ商法だ!
[3:46] えがちゃん: 目的もないなんて、バカのやることです
[3:46] OK: 大丈夫、馬鹿は何やっても馬鹿ですから。
[3:46] *** えがちゃんがVoQnを追加しました ***
[3:46] OK: 江上とか江上とか江上とか。
[3:46] UK - Yuki Akamatsu: タイミングが
[3:46] えがちゃん: では、何をゴールにするか
[3:46] UK - Yuki Akamatsu: おかしくねw
[3:46] えがちゃん: wwwww
[3:46] *** VoQnが退席しました ***
[3:46] えがちゃん: いや、VoQnさんはここでよぶできでしょうw
[3:46] satoru.net: ちなみにここにあつまってるひとって
[3:47] satoru.net: みんhな webつくる系なひとなの?w
[3:47] OK: プライバシー設定で拒否られていることに
[3:47] OK: 江上は無反応である
[3:47] UK - Yuki Akamatsu: ニートです
[3:47 | 3:47:19を編集しました] OK: わろす
[3:47] satoru.net: おー。ニート( ・∀・)イイ!!
[3:47] えがちゃん: わろす
[3:47] OK: 江上を叩くのが職業
[3:47] えがちゃん: って、別にOKさんはそんなにたたいてないでしょうw
[3:47] OK: 修行中
[3:47] えがちゃん: まぁ、一応理念てきなものはここで今後発表していきます
[3:47] OK: 精進します
[3:47] yuiseki: (think)
[3:47] えがちゃん: そうだね
[3:47] えがちゃん: まずは
[3:48] えがちゃん: みんな、メンバー同士仲良くしてもらいたいと言うのが1つと
[3:48] えがちゃん: VoQnさんを誰か読んでもらいたいwwww
[3:48] *** yuisekiがjavascripterを追加しました ***
[3:48] えがちゃん: と言うのが2つ目
[3:48] satoru.net: あー えが叩き家の方ですか。お務め御苦労です!
[3:48] えがちゃん: 3つ目が、自分を大切にしてもらいたい
[3:48] *** yuisekiがtackeを追加しました ***
[3:48] OK: えが叩き券
[3:48] OK: 1枚1000円
[3:48] えがちゃん: 4つ目が今後、僕についてブログでドンドン言及してもらいたい
[3:48] *** UK - Yuki Akamatsuが、会話のタイトルを"ログは非公開だそうですよ。"に変更しました ***
[3:48] javascripter: 参上
[3:48] UK - Yuki Akamatsu: それは
[3:48] えがちゃん: 毎週土曜日に
[3:48] UK - Yuki Akamatsu: 批判とかでも
[3:48] OK: やなこった>topic
[3:48] UK - Yuki Akamatsu: いいんですか
[3:49] OK: 江上について言及すると
[3:49] OK: 彼のモチベーションが上がる!
[3:49] えがちゃん: えがちゃんちに集合
[3:49] OK: 逆説的に言えば
[3:49] えがちゃん: ってなんでやねんwwwwww
[3:49] OK: 江上は無敵である
[3:49] えがちゃん: おkだよ
[3:49] OK: えがみけ。
[3:49 | 3:50:04を削除しました] えがちゃん: このメッセージは削除されました
[3:49] javascripter: というか途中から入ったから1つめと2つめ見れん
[3:49] えがちゃん: ぼくのうちにかってにすみついてもらっても.
[3:49] UK - Yuki Akamatsu: javascripterの人だ
[3:49] えがちゃん: かまいません
[3:49] えがちゃん: 食糧 そのた 物資は
[3:49] OK: 矢野さんってネットでいっぱい稼いでるんですよね!おうちっておっきいんですか!
[3:49] UK - Yuki Akamatsu: えがみハウスや
[3:49] satoru.net: ちっこいです。
[3:50] nommy/asuinim/L4RK: 削除された発言を見れなかった
[3:50] OK: あー俺黒歴史創造しつつあるなー
[3:50] OK: まあいいや
[3:50] えがちゃん: そうですね
[3:50] えがちゃん: OKさんとかの
[3:50] UK - Yuki Akamatsu: おれあれなんですよ
[3:50] えがちゃん: 今日のブログの言及はなかなかよかったです。
[3:50] UK - Yuki Akamatsu: 話の流れとか理念とかを
[3:50] UK - Yuki Akamatsu: 理解してもらうために
[3:50] えがちゃん: ただもっと突っ込んでもいいかなと言うのが正直な話ですが
[3:51] えがちゃん: ああいいう感じで、言及してもらい
[3:51] UK - Yuki Akamatsu: ログは公開した方がいいとおもうんですよ
[3:51 | 3:51:16を削除しました] えがちゃん: このメッセージは削除されました
[3:51] UK - Yuki Akamatsu: > えがちゃん
[3:51] えがちゃん: 最終ゴールは
[3:51] えがちゃん: 日本征服。
[3:51] えがちゃん: これいきましょう。
[3:51] satoru.net: ちっちゃ
[3:51] えがちゃん: おお!
[3:51] OK: ちっちゃいなー
[3:51] えがちゃん: え?
[3:51] satoru.net: 海外にせまないんっすか?
[3:51] nommy/asuinim/L4RK: 全然
[3:51] nommy/asuinim/L4RK: 見てなかった
[3:51] えがちゃん: なるほど
[3:51] えがちゃん: 世界征服
[3:51] nommy/asuinim/L4RK: 消された発言なに?
[3:51] OK: アイスランドをのっとる!
[3:51] えがちゃん: これいきましょう
[3:51] UK - Yuki Akamatsu: わすれた
[3:51] yuiseki: ??くにをつくる
[3:51] satoru.net: とりあえず えがみハウスを
[3:52] えがちゃん: 具体的に土曜日に集まって
[3:52] えがちゃん: 世界征服できるかよwwww
[3:52] OK: 江上殴り放題
[3:52] えがちゃん: とお思いですよね?
[3:52] javascripter: 日曜にしろや
[3:52] OK: えがみはうす
[3:52] えがちゃん: それはうざい>殴る
[3:52] えがちゃん: そういうのやめろ>OK
[3:52] satoru.net: えがみはうすって 飲み食いじゆうですか?
[3:52] えがちゃん: あっはい、
[3:52] OK: 冗談です
[3:52] えがちゃん: 基本的に自由です。
[3:52] yuiseki: えがちゃんが養ってくれるの?
[3:52] えがちゃん: ただ、帰って来て
[3:52] えがちゃん: 物なくなってたらちょっと切れます
[3:52] satoru.net: www
[3:52] えがちゃん: ちなみに、この企画は本気です。
[3:53] OK: そうか江上はSか
[3:53] javascripter: はあそうですか、すごいですね
[3:53] OK: 僕は昔は殴られるだけで心地よかった
[3:53] えがちゃん: もうこうなったら、自分と言うコンテンツを最大限に発揮し
[3:53] えがちゃん: 家を貸し出そうと思います。
[3:53] えがちゃん: さー!みなさん!
[3:53] OK: 不動産に進出!
[3:53] えがちゃん: もし興味がありそうな人がいたら
[3:53] えがちゃん: このグループチャットに知り合いを呼んでください
[3:53] nommy/asuinim/L4RK: マルチ?
[3:53] えがちゃん: あと、部屋の中の状況は常にカメラで公開
[3:53] えがちゃん: されます
[3:53] えがちゃん: ( ^ω^ )ニコニコ風に
[3:54] えがちゃん: こめんとがつけられるので
[3:54] OK: オナニーとかできないじゃないかそれ!
[3:54 | 3:54:06を削除しました] えがちゃん: このメッセージは削除されました
[3:54] OK: それはよくない!
[3:54] えがちゃん: そのてんだけ ごりょうしょうくださいw
[3:54 | 3:54:17を削除しました] tacke: このメッセージは削除されました
[3:54] satoru.net: ww
[3:54] OK: そうか公開オナニーか
[3:54 | 3:54:32を削除しました] tacke: このメッセージは削除されました
[3:54] えがちゃん: いうw
[3:54] UK - Yuki Akamatsu: 友達呼ぶのにログみせたいんですけど
[3:54] えがちゃん: いやだめ
[3:54] UK - Yuki Akamatsu: えー
[3:54] えがちゃん: ここのログは非公開
[3:54] satoru.net: えー ええやろw
[3:54] OK: どうぞどうぞご自由に
[3:55] えがちゃん: ではおkさんでw
[3:55] UK - Yuki Akamatsu: 理念とか説明するのだるい
[3:55] nommy/asuinim/L4RK: 友達を広く呼ぶためにログを一部twitterに張るのはだめですか?
[3:55 | 3:55:22を編集しました] OK: 全部でもどうぞ
[3:55] *** UK - Yuki Akamatsuが、会話のタイトルを"ログ公開ok"に変更しました ***
[3:55] satoru.net: 何でも公開精神でいくほうがよくねw
[3:55] satoru.net: いつから えがちゃんは 保守派になったのw
[3:55] えがちゃん: 公開でw
[3:55 | 3:56:07を削除しました] えがちゃん: このメッセージは削除されました
[3:55] OK: 江上さんはコードを隠してもcrackされるので
[3:55] OK: 仕方がない
[3:55] yuiseki: ほあー
[3:55] えがちゃん: 副理事なのでみなさん言うこと聞いてください
[3:55] OK: 江上民主党
[3:55 | 3:56:02を削除しました] えがちゃん: このメッセージは削除されました
[3:56] OK: 江上「日本をぶっこわす」
[3:56] えがちゃん: 今後satoruさんの言うことを聞いてください
[3:56] OK: 何故ですか
[3:56] *** tackeがsendを追加しました ***
[3:56] yuiseki: 江上のギアスが発動する
[3:56] *** sendが退席しました ***
[3:56] OK: 僕は矢野という男は
[3:56] satoru.net: あ。ぼくはかんけいないですw
[3:56] OK: おもっている
[3:56] satoru.net: 江上が 勝手にいってるだけです
[3:56] *** nommy/asuinim/L4RKがNANKI Haruoを追加しました ***
[3:56] OK: 顔が
[3:57] *** えがちゃんがcats, poohtarou(ぷーたろー), kamemoto.sayaka, 安江健, VoQn, ymrlを追加しました ***
[3:58] *** VoQnが退席しました ***
[3:58] nommy/asuinim/L4RK: 発言が収まったと思ったら人よんどっただけかw
[3:58] satoru.net: えとー、とりあえず 役割分担として、
えがみは 実際 開発とか ばりばりできるわけでもないので、
そのへんは 僕が フォローできればなあとおもってます。
[3:58] OK: 今くしゃみしようとして舌かんだ
[3:58] OK: 痛い
[3:58] OK: 矢野さんに一言。
[3:58] Misho: みしょと聞いて
[3:58] UK - ukstudio - Yuki Akamatsu: ホイミ
[3:58] OK: 江上さんにエサあげてどうするんですか
[3:58] OK: 彼の向上意欲が
[3:59] OK: ますます低下しますよ
[3:59] satoru.net: あー。ぼくは べつに どーこーしたいつもりでもなくて
えがみがやりたいことを やればいー ってくらいです。
[3:59] OK: 可愛い子には旅をさせよ
[3:59] *** えがちゃんが、会話のタイトルを"この計画を「Webサイトを週一で作ろうの会」プロジェクトとして布教してちょ"に変更しました ***
[3:59] 亀: なぜ呼ばれたのか分からない亀
[3:59] OK: 昔の人の言葉です。
[3:59] OK: 矢野さんはダイレクトに助けるのではなく、彼に考えさせる手助けをすべき
[3:59] UK - ukstudio - Yuki Akamatsu: マスコットキャラクターとしてじゃないですかね > 亀さん
[3:59] OK: 彼はどんどん働かなくなります
[3:59] 亀: わーわーさとるさんだーヽ(´ー`)ノ
[3:59] えがちゃん: OKもうわかったから次いこうか
[3:59] nommy/asuinim/L4RK: 分からない亀 に吹いた
[3:59] OK: wwwww
[3:59] えがちゃん: satoruさんのおっしゃるとおり
[3:59] えがちゃん: えとー、とりあえず 役割分担として、
えがみは 実際 開発とか ばりばりできるわけでもないので、
そのへんは 僕が フォローできればなあとおもってます。
[3:59] NANKI Haruo: 働かなくなったら、それはそれでいいんじゃないの?
[4:00] えがちゃん: と言う形でいきます
[4:00] UK - ukstudio - Yuki Akamatsu: この会の一番の理由は
[4:00] OK: ここから江上さんがニートになって廃人になるちょうすぴーどの
[4:00] OK: ふぃくしょんが
[4:00] UK - ukstudio - Yuki Akamatsu: えがみを表にたたせて、裏で勝手に働いてくれる人を
[4:00] えがちゃん: まとめると
[4:00] UK - ukstudio - Yuki Akamatsu: さがすってことじゃないの?
[4:00] えがちゃん: まとめますね
[4:00] OK: 展開するとこだったのに
[4:00] NANKI Haruo: 何故か笑うせーるすまんを思い出すな。
[4:00] OK: まとめなくていいです
[4:00] UK - ukstudio - Yuki Akamatsu: 例:おれがつくる->えがみ「つくったよー」
[4:00] OK: UKがまとめた
[4:00] OK: 以上。
[4:00] yuiseki: 実装つかれたー
[4:00] nommy/asuinim/L4RK: えがちゃんの部屋の床が抜けるくらいの人数で押しかけようぜ
[4:00] satoru.net: 1Fだから 床ないね 乙
[4:00] nommy/asuinim/L4RK: 1Fかー・・・
[4:01] NANKI Haruo: 一畳に8人入れるとして、64人いける
[4:01] NANKI Haruo: もっと入れると思うけど。
[4:01] satoru.net: よーし 64にんだー
[4:01] nommy/asuinim/L4RK: 何人乗っても大丈夫!
[4:01] えがちゃん: 1、Webサイトを週一で作ろうの会発足
5、えがみが会長
[4:01] *** yuisekiがitkzを追加しました ***
[4:01] えがちゃん: 以上。
[4:01] OK: 大丈夫、一階でも
[4:01] OK: 基礎というものがあってだな・・・・
[4:01] *** yuisekiがはまちや2を追加しました ***
[4:01] OK: むしろ矢野家に地下を掘る
[4:01] えがちゃん: OKが今日はいつもよりとばしててうけるw
[4:02] NANKI Haruo: 床が抜けないなら天井を抜け、と先人も申しておる
[4:02] OK: そうだそうだ
[4:02] OK: 天井を抜くんだ!
[4:02] えがちゃん: 7、最終ゴールは世界征服
[4:02] 亀: さとるさんのいえ超散らかってるってきいた(´・ω・`)
[4:02] OK: 今夜の抜きネタは何がいいですか
[4:02] satoru.net: あ、ぼくのうちは きたないので ひとはいれないです>亀さん
[4:02] tacke: 3、えがみハウスではライブカメラ公開とある程度の食事がある
5、えがみが会長
7、最終ゴールは世界征服
[4:02] えがちゃん: 8、サポートはsatoruさんが対応
[4:02] OK: えがちゃんが
[4:02] 亀: >Webサイトを週一で作ろう サイトなん?サービスじゃなくてー?
[4:02] OK: 酷いじょうやくを
[4:02] *** javascripterがsendを追加しました ***
[4:03] OK: 矢野さん搾取されてもいいんですか!
[4:03] えがちゃん: サービスだね
[4:03] *** えがちゃんが、会話のタイトルを"この計画を「Webサービスを週一で作ろうの会」プロジェクトとして布教してちょ"に変更しました ***
[4:03] OK: 独裁者を許すな!
[4:03] satoru.net: 楽天ショップで食糧いろいろ えがみはうすに輸出しときます
[4:03] UK - ukstudio - Yuki Akamatsu: それを活動することで
[4:03] UK - ukstudio - Yuki Akamatsu: おれにメリットはあるんですか?
[4:03] satoru.net: 搾取>だいかんげい
[4:03] UK - ukstudio - Yuki Akamatsu: ギブアンドテイクで
[4:03] OK: 共和制こそが求められる!
[4:03] UK - ukstudio - Yuki Akamatsu: いきたいです
[4:03] UK - ukstudio - Yuki Akamatsu: 金くれ
[4:03] OK: さとるさんがもう駄目な感じ
[4:03] NANKI Haruo: 食べ物貰えるんじゃないの
[4:03] OK: 搾取されていいのは女性だけでして
[4:03] OK: 大歓迎なんですが
[4:03] OK: 江上さんがかわいい女の子とかだったら
[4:03] UK - ukstudio - Yuki Akamatsu: おれは現金がほしい
[4:04] satoru.net: ふつうに さいとつくって
[4:04] satoru.net: 現金ほしいひとは
[4:04] えがちゃん: 1、Webサービスを週一で作ろうの会発足
5、えがみが会長
7、最終ゴールは世界征服
8、サポートはsatoruさんが対応
[4:04] satoru.net: こうこくいれることになるので
[4:04] tacke: 1、Webサービスを週一で作ろうの会発足
5、えがみが会長
7、最終ゴールは世界征服
8、サポートはsatoruさんが対応
[4:04] satoru.net: そこで 各自 現金もうければいいのかなぁ。
[4:04] satoru.net: ただ えがみはうすが ひとふえるだけだと 崩壊しちゃうので
[4:04] 亀: えがちゃんの家ハムスターいるらしいからちょっといきたい
[4:04] satoru.net: 一部は えがみはうす運営に まわればいいのかな?
[4:04] yuiseki: (wasntme)
[4:04] えがちゃん: あーいいですね
[4:04] OK: じゃあ僕は
[4:04] OK: 運営として
[4:04] えがちゃん: おい、、、それはもういないよ、、、>亀
[4:05] OK: 浸水させる
[4:05] satoru.net: えがみはうす はむすたー いたっけ?ティッシュが散乱してたくらいしかおぼえてないぞ
[4:05] OK: ギークハウスを超えろ!
[4:05] えがちゃん: 超えれるよ簡単に
[4:05] はまちや2: 管理権ちょうだい
[4:05] OK: あーしこってますねー
[4:05] nommy/asuinim/L4RK: えがみはうすに行くための金がない
[4:05] 亀: えっ( ̄□ ̄;)ショック><
[4:05] nommy/asuinim/L4RK: 1000円しかもってない
[4:05] UK - ukstudio - Yuki Akamatsu: はまちやさんだ
[4:05] OK: それとも風俗嬢とですか
[4:05] satoru.net: えがみはうす ネット環境が
[4:05] tacke: えがみはうすってどこですか
[4:05] satoru.net: しょぼいよな。無線LANをセット& モニタを数台
[4:06] 亀: ごめんねかなしいこと言わせちゃって>えがちゃん
[4:06] satoru.net: 設置して ノーとの持ち込みできるようにせよ
[4:06] OK: それは触れてはいけないこと>はまちや2
[4:06] えがちゃん: いえいえ>亀
[4:06] *** yuisekiが加山雄三を追加しました ***
[4:06] OK: ぶっちゃけVIP炎上みたいにすれば
[4:06] UK - ukstudio - Yuki Akamatsu: だれw
[4:06] *** えがちゃんが田村 健太郎を追加しました ***
[4:06] OK: うん
[4:06] *** yuisekiがvoqnを追加しました ***
[4:06] えがちゃん: お
[4:06] えがちゃん: Voqnだ
[4:07] *** yuisekiがVoQnを追加しました ***
[4:07] *** えがちゃんがnishio_hirokazuを追加しました ***
[4:07] yuiseki: (bow)
[4:07] *** nishio_hirokazuが退席しました ***
[4:07] Misho: えがみはうすって
[4:07] Misho: なに?
[4:07] Misho: 一軒家!?
[4:07] えがちゃん: 俺の家です
[4:07] satoru.net: www
[4:07] yuiseki: :)
[4:07] OK: えがみの精液くさい家なんて嫌だ
[4:07] satoru.net: リアルハウスでしょ。えがちゃんのw
[4:07] えがちゃん: まぁ、にちかいものはあります
[4:07] Misho: どこにあるの!?
[4:08] Misho: YEBISU
[4:08] OK: おお、ちょろっといけますね
[4:08] tacke: いいとこじゃん
[4:08] *** UK - ukstudio - Yuki Akamatsuがscolorsを追加しました ***
[4:08 | 4:08:54を削除しました] えがちゃん: このメッセージは削除されました
[4:08] Misho: いいとこすぐる。えびすびーるのめいさんちだ。
[4:08] えがちゃん: シムシティみたいに みんなで どんどんおおきくしていく計画
[4:09] NANKI Haruo: 家賃どれくらいですか
[4:09] *** yuisekiがid:todeskingを追加しました ***
[4:09] えがちゃん: 15万ぐらい?
[4:09] はまちや2: 管理権ちょうだい
[4:09] NANKI Haruo: 東京高ぇ
[4:09] *** yuisekiがgeekhouseを追加しました ***
[4:09] id:todesking: 人間が死んでしまった……
[4:09] yuiseki: (bow)
[4:09] OK: ここで私から
[4:09] tacke: 壊滅だ、、、
[4:09] OK: 提案があります!
[4:09] itkz: 人間を殺そう
[4:09] えがちゃん: 管理権のわたしかたがわからないす><
[4:09] scolors: ゆいせき追加しまくりわろた
[4:09] えがちゃん: 1、「Webサービスを週一で作ろうの会」発足
5、えがみが会長
7、最終ゴールは世界征服
8、サポートはsatoruさんが対応
[4:09] tacke: カニバリズム
[4:09] send: とでちんがしゃべった
[4:09] yuiseki: !!!!
[4:09] えがちゃん: 地方で来れない人は、リアルで僕の自宅に寝泊まりOKです。
寝袋は複数用意します。
[4:10] OK: 9、利益は皆で山分け
[4:10] OK: これを追加しましょう
[4:10] えがちゃん: 1、「Webサービスを週一で作ろうの会」発足
5、えがみが会長
7、最終ゴールは世界征服
[4:10] OK: 社会主義を目指す
[4:10] id:todesking: えがみ会に入れば情報商材系サイト作り放題
[4:10] tacke: えがちゃんはもうけをきにしないので1銭もいただきません
[4:10] えがちゃん: 1、「Webサービスを週一で作ろうの会」発足
5、えがみが会長
7、最終ゴールは世界征服
9、利益は皆で山分け
[4:10] OK: よいよい
[4:10] えがちゃん: いやいるよw
[4:10] OK: そして反乱分子として
[4:10] えがちゃん: でも、副業はできないので
[4:10] yuiseki: 新手のネットワークビジネスですか
[4:10] えがちゃん: そこは要相談
[4:10] OK: えがみは粛清されるのであった
[4:11] えがちゃん: サーバは専用サーバを1台用意するのでそこをみんなで共有。
[4:11] OK: えがみさん、もうウェブサービスは
[4:11] えがちゃん: 1、「Webサービスを週一で作ろうの会」発足
5、えがみが会長
7、最終ゴールは世界征服
9、利益は皆で山分け
10、サーバは専用サーバを1台用意するのでそこをみんなで共有。
[4:11] OK: これからの時代はやりませんよ
[4:11] えがちゃん: うっせ>OK
[4:11] OK: これからの時代は島です
[4:11] OK: 島を買いましょう
[4:11] はまちや2: 管理権ちょうだい
[4:11] NANKI Haruo: そういえば昔、
[4:11] OK: 管理権とかない
[4:11] えがちゃん: いや、本気で譲渡の方法がわからないです
[4:11] えがちゃん: はまちちゃんさんも
[4:11] UK - ukstudio - Yuki Akamatsu: グループって管理権ないん?
[4:11] えがちゃん: 入ります?
[4:12] OK: >[4:11:30] えがちゃんの発言: うっせ>OK
ショックでした
[4:12] UK - ukstudio - Yuki Akamatsu: ここのメンバーは強制じゃないんかい
[4:12] はまちや2: hairuhariru
[4:12] NANKI Haruo: やっぱり、情報商材とか、怪しげなビジネスモデルに興味津々な後輩がいて、
[4:12] satoru.net: いそがしくて えがみはうすなんて これないとおもわれww>はまちやさん
[4:12] えがちゃん: よかったー
[4:12] はまちや2: いくにきまってんじゃん
[4:12] satoru.net: まじっすか!!!
[4:12] えがちゃん: おぉありがとうございます。
[4:12] NANKI Haruo: 好き放題やらせてたな。
[4:12] sys: Available commands:
/me [text]
/topic [text]
/add [skypename]
/history
/find [text]
/fa or /
/alertson [text]
/alertsoff
/call [skypename] ..
/leave
/goadmin
/get creator
/get role
/whois [skypename]
/setrole [skypename] MASTER|HELPER|USER|LISTENER
/kick [skypename]
/kickban [skypename]
/get guidelines
/get xguidelines
/set guidelines [text]
/get options
/set options [[+|-]flag] ..
/setpassword [password] [password hint]
/clearpassword
/get password_hint
/get banlist
/get allowlist
/set banlist [[+|-]mask] ..
/set allowlist [[+|-]mask] ..
/help
For more help please see http://www.skype.com/go/help.chathelp
[4:12] NANKI Haruo: 専用のサーバも買ってさ。
[4:12] えがちゃん: XSSの脆弱性部をお願いしたいものですね
[4:12] send: はまちちゃんが行くなら俺も見に行くか
[4:13] UK - ukstudio - Yuki Akamatsu: おれもおれも
[4:13] OK: PHPでXSSの脆弱性出すヤツは
[4:13] javascripter: 俺もいこう
[4:13] えがちゃん: おk
[4:13] OK: ただのコーダーの知識不足で
[4:13] scolors: 見るだけ
[4:13] OK: PHPは適切に標準関数使えば
[4:13] えがちゃん: ちなみに、何度も言うけど
[4:13] OK: ワンステップでXSS可能性を排除できる
[4:13] えがちゃん: ここのチャットは公開のしかたよろしくね!
[4:13] UK - ukstudio - Yuki Akamatsu: htmlspe(ryだけじゃダメな時もあった気がするけど。
[4:13] えがちゃん: 決して、ブログとかでコピペしちゃだめだよ?w
[4:13] UK - ukstudio - Yuki Akamatsu: ん?
[4:13] tacke: ん?
[4:13] UK - ukstudio - Yuki Akamatsu: 公開okだろ?
[4:13] えがちゃん: XSS云々そんな細かいことできにしてるやつらは、ちょっと 表に出ろ
[4:13] OK: なんかそれに対する全対策的関数とかなかったっけ>UK
[4:14] scolors: 公開のしかたよろしくねって
[4:14] えがちゃん: (っていうふり>XSS)
[4:14] UK - ukstudio - Yuki Akamatsu: あったっけ
[4:14] tacke: 公開の仕方がそもそもわからんのですが
[4:14] NANKI Haruo: 表って、家の外にでればいいのか?
[4:14] UK - ukstudio - Yuki Akamatsu: PHPわかんないや
[4:14] えがちゃん: XSS云々そんな細かいことできにしてるやつらは、ちょっと 表に出ろ
[4:14] javascripter: htmlspe(ryが駄目なのってUTF-7の時とか?
[4:14] OK: えがみみてると
[4:14] OK: いわいらするなー
[4:14] えがちゃん: 俺らの狙ってるのはそんなちっけーことじゃねえ
[4:14] UK - ukstudio - Yuki Akamatsu: 文字コードとか
[4:14] OK: UTF-7 Injection
[4:14] id:todesking: PHP、何でデフォルトでHTMLエスケープされるようになってないんだろう
[4:14] *** yuisekiがsatromiを追加しました ***
[4:14] *** tackeがdankogaiを追加しました ***
[4:14] send: IE で ` もダメじゃなかったっけ
[4:14] えがちゃん: だんこがい!?ww
[4:14] satoru.net: とりあえず いるもの:
[4:15] OK: だんこがいわろすwwwwwwwwwwwwwwwwww
[4:15] *** dankogaiが退席しました ***
[4:15] OK: ぷらいばしーせっていwwwwwwwwwww
[4:15] UK - ukstudio - Yuki Akamatsu: w
[4:15] NANKI Haruo: さすが
[4:15] はまちや2: うん。その方が良かったね。デフォルトでエスケープ。
[4:15] tacke: ・・・チッ
[4:15] yuiseki: !!
[4:15] OK: 使いづらくないか
[4:15] satoru.net: ドメインって共通にしたほーがいいのだろうか。その辺はXSSのとき
色々問題ありそげだから じゆうにしとく?
[4:15] NANKI Haruo: XSS垂れ流しよりマシ
[4:15] UK - ukstudio - Yuki Akamatsu: PHPに関していえば
[4:15] はまちや2: 世の中の脆弱性がすごくへるよ
[4:15] UK - ukstudio - Yuki Akamatsu: デフォルの方がいいかなーとはおもう
[4:15] scolors: ていうか PHP XSS で検索するだけでも大量に参考 Permalink | 記事への反応(1) | 05:08
せっかく書いたから匿名でのせてみるよ
使い方は
必要なものを gem で取ってくるにはこうすればいいよ
長すぎてelispが消えたから続きがあるよ
@echo off setlocal set WD=%~dp0 cd /d %WD% ruby get_movies.rb ruby get_images.rb ruby create_m3u.rb
user: ユーザID password: パスワード ids_file: ids.txt done_file: ids_done.txt movies_dir: movies log4r_config: pre_config: global: INFO loggers: - name: app type: Log4r::Logger level: INFO outputters: - STDOUT - FILE outputters: - name: STDOUT type: Log4r::StdoutOutputter formatter: type: Log4r::PatternFormatter pattern: "%d [%l] %C - %M" date_pattern: "%H:%M:%S" - name: FILE type: Log4r::FileOutputter filename: "#{LOGDIR}/sangels.log" formatter: type: Log4r::PatternFormatter pattern: "%d [%l] %C - %M" date_pattern: "%Y-%m-%d %H:%M:%S"
require 'fileutils' require 'logger' require 'mechanize' BASEDIR = File.dirname($0) require "#{BASEDIR}/util" require "#{BASEDIR}/sangels" $config = load_config(BASEDIR) prepare_logger(BASEDIR) $log = new_logger("get_movies") WWW::Mechanize.log = new_logger("mechanize") WGet.log = $log class IDFile def initialize(file) @file = file unless File.exist?(@file) Fileutils.touch(@file) end end def ids(contains_comment = nil) File.open(@file) {|io| io.to_a.map {|x| x.chomp }.select {|x| if x.empty? nil elsif contains_comment true else not /^\s*\#/ =~ x end } } end def add(id) ids = ids(true) unless ids.any? {|x| x == id} write(ids + [id]) end end def delete(id) ids = ids(true) if ids.any? {|x| x == id} write(ids - [id]) end end def write(ids) File.open(@file, "w") {|io| ids.each {|x| io.puts x} } end end $log.info("BEGIN #{$0} ================") exit_code = 0 begin ids_file = IDFile.new($config.ids_file) done_file = IDFile.new($config.done_file) movies_dir = $config.movies_dir wget = WGet.new sangels = SAngels.new sangels.login($config.user, $config.password) ids_file.ids.each {|id| begin movies = sangels.movies(id) rescue SAngels::Movies::InvalidMoviesError $log.warn("invalid movie id: #{id}") next end dir = File.expand_path(id, movies_dir) movies.each {|link| wget.retrieve(link.href, dir) } expected = movies.movie_links.map{|x| File.basename(x.href)} actual = Dir.glob("#{dir}/*").map {|x| File.basename(x)} if (expected - actual).empty? done_file.add(id) ids_file.delete(id) end } rescue => e $log.error(e) exit_code = 1 end $log.info("END #{$0} (#{exit_code}) ================") exit exit_code
require 'fileutils' require 'logger' require 'mechanize' require 'ostruct' BASEDIR = File.dirname($0) require "#{BASEDIR}/util" require "#{BASEDIR}/sangels" $config = load_config(BASEDIR) prepare_logger(BASEDIR) $log = new_logger("get_images") WWW::Mechanize.log = new_logger("mechanize") WGet.log = $log $log.info("BEGIN #{$0} ================") exit_code = 0 begin movies_dir = $config.movies_dir sangels = SAngels.new sangels.login($config.user, $config.password) thumbnails = sangels.thumbnails Dir.glob("#{movies_dir}/*").each {|dir| next unless File.directory? dir id = File.basename(dir) url = thumbnails.url(id) unless url $log.warn("#{id} is not found") next end path = File.expand_path("00_thumbnail#{File.extname(url)}", dir) next if File.exist? path $log.info("retrieving #{url}") thumbnail = thumbnails.get_file(id) File.open(path, "wb") {|io| io.write(thumbnail)} } rescue => e $log.error(e) exit_code = 1 end $log.info("END #{$0} (#{exit_code}) ================") exit exit_code
BASEDIR = File.dirname($0) require "#{BASEDIR}/util" $config = load_config(BASEDIR) movies_dir = $config.movies_dir Dir.glob("#{movies_dir}/*") {|dir| next unless File.directory? dir name = File.basename(dir) files = Dir.glob("#{dir}/*.wmv").sort File.open("#{movies_dir}/#{name}.m3u", "w") {|io| files.each {|file| io.puts "#{name}/#{File.basename(file)}" } } File.open("#{dir}/00_movies.m3u", "w") {|io| files.each {|file| io.puts "#{File.basename(file)}" } } }
require 'mechanize' require 'hpricot' BASEDIR = File.dirname($0) require "#{BASEDIR}/util" class SAngels HOST = "real2.s-angels.com" LOGIN_URL = "http://#{HOST}/member/" INFO_URL = "http://#{HOST}/teigaku/item.php" THUMBNAILS_URL = "http://#{HOST}/teigaku/" THUMBNAIL_URL = "http://#{HOST}/images/default/thumb/" def initialize() @agent = WWW::Mechanize.new end def login(user, password) login_form = @agent.get(LOGIN_URL).forms.find {|form| form.fields.any? {|field| field.name == "frmLoginid"} } login_form.frmLoginid = user login_form.frmPw = password @agent.submit(login_form) end def movies(id, no_validate = nil) Movies.new(@agent, id, !no_validate) end def thumbnails Thumbnails.new(@agent) end class Thumbnails def initialize(agent) @agent = agent doc = Hpricot(@agent.get_file(THUMBNAILS_URL)) elems = doc.search("div[@class=realthum]/a") @links = Hash( elems.map {|elem| href = elem["href"] id = $1 if /ID=(.+)/ =~ href url = elem.search("img")[0]["src"] [id, url] }) end def get_file(id) @agent.get_file(url(id)) end def url(id) @links[id] end def exist?(id) url(id) end end class Movies class InvalidMoviesError < StandardError end def initialize(agent, id, no_validate) @agent = agent @id = id if !no_validate && !valid? raise InvalidMoviesError end end def info_page_url "#{INFO_URL}?ID=#{@id}" end def info_page @agent.get(info_page_url) end def movies_page @agent.click(info_page.links.find {|link| /P=10/ =~ link.href}) end def movie_links movies_page.links.select {|link| /wmv$/ =~ link.href }.sort {|a, b| File.basename(a.href) <=> File.basename(b.href) } end def valid? info_page.uri.to_s == info_page_url end def each(&block) orig_links = movie_links orig_links.each {|orig_link| link = movie_links.find {|l| File.basename(l.href) == File.basename(orig_link.href)} block.call(link) } end end end
require 'log4r' require 'log4r/yamlconfigurator' require 'singleton' require 'fileutils' require 'ostruct' def Hash(a) Hash[*a.flatten] end def load_config(basedir) OpenStruct.new(File.open("#{basedir}/config.yaml") {|io| YAML.load(io)}) end def new_logger(name) Log4r::Logger.new("app::#{name}") end def prepare_logger(basedir, logdir = nil) logdir ||= basedir Log4r::YamlConfigurator["LOGDIR"] = logdir Log4r::YamlConfigurator.load_yaml_file("#{basedir}/config.yaml") end class NullObject include Singleton def method_missing(message, *arg) NullObject.singleton end end class WGet class << self attr_accessor :log def initialize super @log = NullObject.singleton end end def log self.class.log end def retrieve(url, dir) FileUtils.mkdir_p(dir) file = File.expand_path(File.basename(url), dir) if File.exist?(file) log.info("already retrieved #{url}") return true end tmp = "#{file}.part" log.info("retrieving #{url}") ret = system("wget", "-c", "-O", tmp, url) if ret log.info("retrieving succeeded #{url}") File.rename(tmp, file) else if $? == 0x020000 # Ctrl-C exit($?) else log.error("retrieving failure #{url} (#{$?})") end end return ret end end
Google Chromeってパスワード丸見えじゃね? | IDEA*IDEA
http://b.hatena.ne.jp/entry/http://www.ideaxidea.com/archives/2008/09/google_chrome_1.html
http://b.hatena.ne.jp/www6/20080903#bookmark-9873747
いつでもどこでも忘れたパスワードを思い出せる、呼び出せるサービス。
「昨日見たサイトは?検索ワードは?」→適当にいくつか答える→ユニークユーザにぶち当たり次第そのユーザのパスワードを見ることができる。
穴については考えない。
OpenSSH に "Fingerprint ASCII Visualisation" という機能がついたらしい
http://www.st.ryukoku.ac.jp/~kjm/security/memo/2008/07.html#20080722_OpenSSH
多分。サーバの公開鍵の Fingerprint をアスキーアート化して、そのビジュアルを覚えてサーバのなりすましを防ぎましょう!という技術だと思います。但しexperimental。
とりあえず手元で make してみる
$ tar -zxvf openssh-5.1p1.tar.gz $ cd openssh-5.1p1 $ ./configure $ make
VisualHostKey オプションはデフォルトでオフなのだけど、設定変えるのが面倒なので ssh に -o "VisualHostKey yes" オプションをつけて起動してみる。接続先は普段使ってるホストで。
$ ./ssh -o "VisualHostKey yes" ***.###.%%%
結果、こんな風に表示された。
Host key fingerprint is _,,....,,_ _人人人人人人人人人人人人人人人_ -''"::::::::::`''>93:e6:d0:6b:75:6d:22:be:d8:7f:11:ad:50:dc:16:6f< ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ |::::::;ノ´ ̄\:::::::::::\_,. -‐ァ __ _____ ______ |::::ノ ヽ、ヽr-r'"´ (.__ ,´ _,, '-´ ̄ ̄`-ゝ 、_ イ、 _,.!イ_ _,.ヘーァ'二ハ二ヽ、へ,_7 'r ´ ヽ、ン、 ::::::rー''7コ-‐'"´ ; ', `ヽ/`7 ,'==─- -─==', i r-'ァ'"´/ /! ハ ハ ! iヾ_ノ i イ iゝ、イ人レ/_ルヽイ i | !イ´ ,' | /__,.!/ V 、!__ハ ,' ,ゝ レリイi (ヒ_] ヒ_ン ).| .|、i .|| `! !/レi' (ヒ_] ヒ_ン レ'i ノ !Y!"" ,___, "" 「 !ノ i | ,' ノ !'" ,___, "' i .レ' L.',. ヽ _ン L」 ノ| .| ( ,ハ ヽ _ン 人! | ||ヽ、 ,イ| ||イ| / ,.ヘ,)、 )>,、 _____, ,.イ ハ レ ル` ー--─ ´ルレ レ´ Password:
確かにFingerprintがAAで出てきた。これは覚えやすい。
$ ./ssh -o "VisualHostKey yes" ***.###.%%%
結果
Host key fingerprint is ff:fb:f0:43:c4:85:9f:70:16:7d:d8:f1:7d:dc:79:53 ,,,,,,pxxvxxg,,,,_ ,,df(^"゛ g、 ^゜゜lq 〈! ,,dl゜゛ ./==x]t,,_ ]l.__,,g[,,,,,,,,,,,,,,p4" .l[^k ][「,,pr=t、`、 ____ .l[ ] g" ][_ ]! ./「゜^゜9,,「n,,] 4゜ .。、.\イ ゜lk ,,g[ .l] ]l. 〈^゜ltn4,,,,_ ] ヨ。. ゜ll._ ゜"9n......./ff ] ヨ、.\q,,,,____ ,,gf゛ gl゜ ^9nnxxxxx゜゜゜゜゜゜゜゜゜゜xvtf"゛ Password:
なんかこわい!
$ ./ssh -o "VisualHostKey yes" ***.###.%%%
結果
Host key fingerprint is 36:fc:e6:85:b7:f5:22:7e:45:f4:d8:5d:5d:f4:83:86 +--[ RSA 1024]----+ | | |.. .o . | |...o. | | . o . . | | + E + * + | | o + S = | | . . o o . | | ... o * o | | . . | +-----------------+ Password:
ネットハックかよ!
ちなみに最後のだけホント。
買えたお( ^ω^)
でも、手続きで30分かかった…orz
MySoftbankで変更するんだけど、現在、iPhoneからしか接続できない。
あの長ったらしいIDとPasswordをいきなりタッチパネルから入力させられる初心者涙目w
Passwordを携帯などで入力するとき、正しく入力できているか、運に頼るしかないんだけど、このiPhoneのSafariは入力直後は一番最後の文字だけ「●」で消えてない!だから入力していて目で確認できるから安心!すげー。この機能はいいね。
機械的に割り振られたアカウントは14文字とか恐ろしい長さのアドレスだったけど、発売当日の今日は3文字のアドレスでもゲットできた。ラッキー。
マナーモードでも消えない!日本仕様?とりあえず、ガラパゴスの呪縛はこんなところにも。
すげぇ、普通に使える。
やっぱりどこでもgmail最高!
gmailのContactsを指定したら、ネットワーク越しに取ってきやがった。びっくりしてちょっとちびった。
もうgmailの連絡先ですべて管理してしまおうかなー。移行する手間考えたら…。
早くFirefoxにも対応しなさいよー。
Windows版だけかな?
30日でサーバから消えるから、大事なメールは自分でローカルのアドレスに転送しるって注意書きにあった。
ちなみにまだ自動転送の項目を見つけられていない。手動なんて死にそうorz
こんなところかな。
眠いのでまた後で追加します。
元増田だよ!
外部ログインで入られるとメールアドレスとかがないのが前提になってしまうのでいろいろ機能に制限をいれなきゃいけなかったり、できることを縛る必要がある。
ここでは「OpenIDでログインすること」というアクションの意味を考えないといけないよね。
スターのような一瞬の感情のときめきを表現する「だけ」のサービスなら現状の仕様でも問題ないということなんだろうね。
「OpenIDプロバイダとサービス(RP)の属性情報の交換、については新規スタートアップの登録時のフォームの自動化で使えるよね、という話が例にあがるように
増田の言うとおりはてなダイアリーなんかの既存エンドユーザに強く紐づくサービスをOpenID認証で認可する、
ていうのは現実的ではないということを示唆しているよねー。実装が辛くなるのに、それに対するメリットてあるの?ていう。
ぼくらエンドユーザにOpenID認証がどれだけの「おもてなし」を享受させてくれるのがよくわからない!のがOpenIDの最大のうさんくささだと思いますー。
OpenIDプロバイダさんは、まぁメリットあるよね。自分のIDを外部でも使ってくれるいいチャンスだもんねー。。そりゃプロバイダやります!って手あげるさYahoo!もmixiも。
サービス側は?新規会員登録の敷居が下がる?まぁそれはあるかもね。
気軽なOpenID認証を通じて「お試し」ライトな登録として利用させよう、という流れもあるみたい。
でも結局本気サービス側をやるにはユーザの属性情報は必要だしねー。サービスやる人は結局商売にしたいんだから。
まぁOpenSocialとかgraphとかの技術と連動すれば面白くなれる気はするけどー。
で、エンドユーザ(僕ら)は?
ライトな登録ができるようになるからいい?
利用者側としては、サービスごとにログイン情報を使い分ける手間を厭わなければ、OpenID があろうとなかろうとどうでもよいと言えます。
architectures.jp ≫ OpenID のセキュリティ(2) http://www.architectures.jp/archives/16
現状これが本質だとおもうけどなー。
javascript:i='[MEMBER_ID]';p='[PASSWORD]';f=document.createElement('form');g=document.createElement('input');h=document.createElement('input');g.setAttribute('name','id');g.setAttribute('value',i);g.setAttribute('type','hidden');h.setAttribute('name','pass');h.setAttribute('value',p);h.setAttribute('type','hidden');f.method="post";f.action="https://secure.amuse.co.jp/perfume/_perfume_login/index.php";f.appendChild(g);f.appendChild(h);document.body.appendChild(f);f.submit();
http://anond.hatelabo.jp/20080130215148
ほんとほんと。
そのユーザが最後にはてなを利用した時期がおおむね把握できる。
はてなはidとpasswordが同じアカウントを作成可能なので、取得したリストをidをpasswordとしてログインすることで数%のアカウントがログイン可能になる。これはjoeアカウントといってクラッキングの基本中の基本だ。これははてなのシステム設計がいかに適当かという部分で、
という、最低な仕様になっている。
はてなに登録する際、アカウント名を普段他のサービスでも利用しているものにして、アカウント作成後に突如アカウント名がユーザ名として表示されたことに驚愕したユーザもいるのではないかと思う。
そうして取得したjoeアカウントかつおそらく放置されているであろうものは利用し放題である。
これに気づいたのはもう数年前だけど、そのときにはてなにメールしたりしたが完全放置である。
アメリカの工業デザインでは「フールプルーフ」というものが重視される。
「fool proof」のとおり、バカでも使える、バカでも甚大な事故を起こさないための工夫である。
アメリカというのは一握りの天才が、大多数のバカでも運用できるシステムを構築することで工業を支えてきた。
日本の場合「これに触ると危なくて死んじゃうから触らないでね!」を徹底する。
アメリカは「これに触りまくっても死なないようにしよう」とする。この差は大きい。
はてなは「危ないパスワードは設定しないでね」というスタンスをとった。
はてなは初心者じゃないし、どうでもいいデータを扱ってるわけでもないんだからそのくらいなんとかしろ。
多分情報自体はもういろんなクラッカーに何度も盗まれてるはずだ。騒ぎになってないだけで。
騒ぎにならないとわからないのか?
// せつぞく
$db = DB::connect("mysql://$username:$password@$host/$database");
// くえりー(とりあえず,hogeが300以下で一番大きいやつ
$result = $db->query("SELECT MAX(hoge) FROM Table WHERE hoge<=300");
ここまで同じ
$max =& $result->fetchRow(DB_FETCHMODE_OBJECT);
return $masuda;
オブジェクトだと,カラム名"MAX(hoge)"入れるとエラーが…
$max =& $result->fetchRow(DB_FETCHMODE_ORDERED);
$masuda = $max[0];
return $masuda;
みたいに配列にすると引ける…
カラム名に()があるのが駄目な気がするんだけど、カラム名に()が含まれていると
オブジェクトで受け取れなくなったりするの?
rubyとは - はてなダイアリー Rubyとは - はてなダイアリー
RubyForge: One-Click Ruby Installer: Project Info
RDE(Ruby Development Environment) - Ruby??J??????????
#!/usr/bin/ruby -Ks
# print "Content-Type: text/html;charset=UTF-8\n\n"
p "表示"
http://127.0.0.1:3000/ http://127.0.0.1:3000/recipe/list
http://127.0.0.1:3001/ http://127.0.0.1:3001/recipe/list
http://127.0.0.1:3001/account/signup http://127.0.0.1:3001/test
Hot Chips (delete) Snacks 2004-11-11
Ice Water (delete) Beverages 2004-11-11
Killer Mushrooms (delete) Snacks 2005-09-13
満足せる豚。眠たげなポチ。:Rolling with Ruby on Rails - Japanese Translation - p1
満足せる豚。眠たげなポチ。:Rolling on Ruby on Rails - Japanese Translation - p5
ITmedia エンタープライズ:第1回 Instant Railsで始めるWindows環境のRails (1/2)
DROP TABLE IF EXISTS `items`;
CREATE TABLE items (
id int(11) NOT NULL auto_increment,
login varchar(80) default NULL,
password varchar(40) default NULL,
);
えぇてるのぉと:Railsでログイン認証 - livedoor Blog(ブログ)
8 app/views/test/index.rhtmlの編集
Welcom <%= @session['user'].login %>!
Login Generator (1) - Nowhere Near
config/environment.rb に以下の行を追加する。
module LoginEngine
config :salt, "your-salt-here"
end
Engines.start :login
パパブログ: RoR : login_generator : login中のユーザ情報の取得
@session['user'].login
で、idやloginが取得できる。
ちなみにidはActiveRecordおなじみのidで、
;C:\nonidata\InstantRails\ruby\bin;
cd C:\nonidata\InstantRails\ruby\bin
C:\nonidata\InstantRails\ruby\bin>gem install login_generator
Successfully installed login_generator-1.2.2
C:\nonidata\InstantRails>cd C:\nonidata\InstantRails\rails_apps\cookbook
C:\nonidata\InstantRails\rails_apps\cookbook>ruby script/generate login Account
create lib/login_system.rb
C:\nonidata\InstantRails\rails_apps>cd C:\nonidata\InstantRails\rails_apps\cookbook
C:\nonidata\InstantRails\rails_apps\cookbook>ruby script/generate controller test
exists app/controllers/
[Ruby] Rails(ActiveRecord)の多対多関連 - yuum3のお仕事日記
has_one
has_many
belongs_to
has_and_belongs_to_many
habtm と has_many :through (ActiveRecord)
ActiveRecord の歩き方 - Association 編(1) - Rails で行こう! - Ruby on Rails を学ぶ has_many :comments
developerWorks Japan has_one :address
Rubyist Magazine - RubyOnRails を使ってみる 【第 3 回】 ActiveRecord
create メソッドを使うこともできます。create は new したあと save (DB に格納) します。
Rubyist Magazine - RubyOnRails を使ってみる 【第 4 回】 ActionPack
find(:all, :conditions => ["user_name = ?", user_name])
find_all(["user_name = ?", user_name])
find_all_by_user_name(user_name)
Part2 Rubyに学ぶ「Ruby on Railsの正体」:ITpro
book = Product.find_or_create_by_name_and_price('book', 2079)
リスト7●productsテーブルからnameが'book',priceが2079であるようなProductオブジェクトを読み取り,存在しなかった場合はデータベースにレコードを新規作成する処理
RoR Wiki 翻訳 Wiki - HowToUseLegacySchemas
恣意的で複雑なクエリや、主キーを持たないテーブルにはfind_by_sqlを使う
テーブルが論理的な主キーを持たないなら、
find_by_sqlを使えば主キーを全く指定しない曖昧で複雑なクエリを実行も実行できる。
Post.find_by_sql ["SELECT * FROM posts WHERE author = ? AND created > ?", author_id, start_date]
エディタ utf8
チュートリアルを動かしてみる - 肩書「シニアコンサルタント」のつぶやき
Railsでソーシャルブックマークを作ってみようか(第1回) - 坊やがゆく
ようこそ<%= @session['user'].login %>さん
Railsでソーシャルブックマークを作ってみようか(第2回) - 坊やがゆく
Railsでお馴染み37signalsのURLが凄い件について:TKMR.blog.show
URLにキーワードを含めことでSEO対策になるかも、でもそれだけ:TKMR.blog.show
http://127.0.0.1:3001/recipe/list
tetraの外部記憶箱 - Instant Railsのインストール , 追記:phpMyAdminの日本語環境設定 , 未踏ソフト記事