SlideShare una empresa de Scribd logo
1 de 33
今どきのWeb技術で
スコアサーバを改良してみよう
目標
ハッカソンに参加したい!
って気持ちにさせる
もくじ
• ハッカソンについて
• 最新のWeb技術について
• サーバーを拡張してみよう
ハッカソンってなにやるの?
テーマに沿ったプログラムを
会場に集って自由に作る!
SECCON九州大会でのテーマ
• スコアサーバに必要となるサーバ・クライアン
ト型ネットワークアプリケーション技術
• Webアプリケーション技術
• スコアサーバと連携,協調するインタラクティ
ブでエモーショナルなクライアント技術
• ネットワークの状況や競技進行の様子を可視
化する技術
CTFに関連してスコアサーバーを
改良してみる
スコアサーバーのお仕事
• 問題出題
– 主催者によるオープン
– 最初に回答した人がオープン
• 回答受付
– 答えとなるキーを入力して送信
• 正否判定
– キーが正しいかチェック。点数を反映
• 得点管理
– チームごと・個人ごとで総得点の記録・表示
最新のWEB技術って
HTML5
• HTML5(エイチティーエムエル・ファイブ)とは HTML の 5 回目に当
たる大幅な改定版である。表記は HTML と 5 の間にスペースを含
まない[1]。XML の文法で記述する場合、XHTML5 と呼ばれる[2][3]。
• HTML5 は WHATWG によって2004年に定められた Web
Applications 1.0 に Web Forms 2.0 を取り入れたものが W3C の専
門委員会に採用され、W3C より2008年1月22日にドラフト(草案)
が発表された。
• 現在、2014年までの正式勧告を目指して策定が行われている[4]。
改訂の主要目的のひとつとして人間にも読解可能でコンピュー
ターやディバイス(ウェブブラウザ、構文解析器など)にも矛盾せず
読解されるとともに最新のマ ルチメディアをサポートする言語に向
上することである。HTML5ではHTML 4だけでなくXHTML1や
DOM2HTML(特にJavaScript)も加える意向である。
http://ja.wikipedia.org/wiki/HTML5より
簡単にまとめると
• どのブラウザでも同じように利用できる
• オーディオやビデオが利用できる
HTML5に関連する技術
CSS3
WebSocket
Notification API
Web Storage
Web Worker
WebGL
Canvas
Geolocation API
File API
Server-sent Event
実際に拡張してみる
SECCON CTF のスコアサーバー
• https://github.com/yoggy/ctf-scoreserver
• Ruby製
• 機能
– 得点管理
– 問題管理
– アナウンスメント機能
– ユーザー登録
これをもとに拡張をしてみる
追加する機能
• 通知機能
– 新しい問題
– 得点獲得
– アナウンスメント
• 手法
– WebSocket による リアルタイム通信
– Server-sent eventsによる配信
– NotificationAPI でデスクトップ通知
実装間に合いませんでした…
使うはずだった技術
• WebSocket
– サーバーとブラウザ間でソケット通信ができる
– XMLHttpRequestは?
• 通信のたび接続が必要
• 持続的な通信が難しい
– サーバーからクライアントに情報を
伝える事ができる
使う技術
• Server-sent events
– サーバーのイベントをリアルタイムに
クライアントに送信できる
– HTTPプロトコルを使う
– HTTP接続を継続したまま
– Chunkごとに分けてクライアントにデータを送る
– Push通信が実現できる
push通信イメージ
Client Server
ポーリング型
Client Server
プッシュ型
使う技術
• Notification API
– 通知を出すAPI
– 対応ブラウザ:Firefox, Chrome, Safari
サーバー
• EventStream用のパスを用意
$connections = []
get '/stream', :provides => 'text/event-stream' do
stream :keep_open do |out|
$connections << out
out.callback { $connections.delete out }
out.errback do
logger.warn "lost connection"
$connections.delete out
end
end
end
サーバー
• イベント送信
post '/admin/save' do
c = Challenge.find_by(id: params['id'])
c ||= Challenge.new
admin_block do
c.id = params['id']
…(中略)
c.save
if c.status == 'show'
json = { "type" => "challenge", "id" => c.id, "abstract" => c.abstract, "point" => c.point }
$connections.each { |out| out << "data: #{JSON.generate(json)}nn" }
end
redirect '/admin/main'
end
end
クライアント
• クライアントからServer-sent eventsで接続
var es = new EventSource('/stream');
es.onmessage = function(e) {
var data = JSON.parse(e.data);
if (data.type === "challenge") {
notification.newNotify({title: "新しい問題があります",
detail: "新しい問題が追加されました!n 問題:“ + data.abstract
});
return;
}
}
クライアント
• 通知 –オプトイン-
if (Notification) {
if (Notification.permission === "denied" ) {
console.log("disable notification”);
return;
}
Notification.requestPermission(function(p) {
if (p === "denied") {
console.log("disable notification”);
return;
}
});
return;
}
クライアント
• 通知
var notification = new Notification(“タイトル”, { body: “メッセージ”});
notification.onshow = function() { setTimeout(notification.close, 3000);}
実際に
ハッカソンに向けて
• CTFサーバーの改良
– 新しいWeb技術を取り入れてみる
• アイディア次第!
– 他のCTFのスコアサーバーも参考にしてみる
– キーによる回答以外の方法も?
• File APIでファイルを投げてみるとか
• 他のテーマ
– 色々なアイディア
SECCON CTF ハッカソンに
参加してみよう!
ありがとうございました!

Más contenido relacionado

La actualidad más candente

La actualidad más candente (9)

グリーにおけるAWS移行の必然性
グリーにおけるAWS移行の必然性グリーにおけるAWS移行の必然性
グリーにおけるAWS移行の必然性
 
SAP HANA on AWS
SAP HANA on AWSSAP HANA on AWS
SAP HANA on AWS
 
1秒でも早くAutoScale
1秒でも早くAutoScale1秒でも早くAutoScale
1秒でも早くAutoScale
 
rails + serverengineで
お手軽daemon
rails + serverengineで
お手軽daemonrails + serverengineで
お手軽daemon
rails + serverengineで
お手軽daemon
 
Couchbase Serverのサーバ移管と2.1から3.0.1へのバージョンアップ
Couchbase Serverのサーバ移管と2.1から3.0.1へのバージョンアップCouchbase Serverのサーバ移管と2.1から3.0.1へのバージョンアップ
Couchbase Serverのサーバ移管と2.1から3.0.1へのバージョンアップ
 
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまでCode for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
 
【IVS CTO Night & Day】Serverless & Mobile Updates
【IVS CTO Night & Day】Serverless & Mobile Updates【IVS CTO Night & Day】Serverless & Mobile Updates
【IVS CTO Night & Day】Serverless & Mobile Updates
 
serverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonserverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Python
 
hbstudy#82 SRE大全 FullGCとの闘い (UZABSE SRE Team Hirofumi Kubo)
hbstudy#82 SRE大全 FullGCとの闘い (UZABSE SRE Team Hirofumi Kubo)hbstudy#82 SRE大全 FullGCとの闘い (UZABSE SRE Team Hirofumi Kubo)
hbstudy#82 SRE大全 FullGCとの闘い (UZABSE SRE Team Hirofumi Kubo)
 

Similar a SECCON@福岡ハッカソン直前勉強会「今どきのWeb技術でスコアサーバーを改良してみよう」

Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
 
One ASP.NET の今とこれから
One ASP.NET の今とこれからOne ASP.NET の今とこれから
One ASP.NET の今とこれから
Akira Inoue
 

Similar a SECCON@福岡ハッカソン直前勉強会「今どきのWeb技術でスコアサーバーを改良してみよう」 (20)

さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
 
CloudSpiral 2014年度 Webアプリ講義(2日目)
CloudSpiral 2014年度 Webアプリ講義(2日目)CloudSpiral 2014年度 Webアプリ講義(2日目)
CloudSpiral 2014年度 Webアプリ講義(2日目)
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
 
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
SQL Beginners Day #1 - SQL Server および Azure SQL のインストールと管理
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
 
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
 
One ASP.NET の今とこれから
One ASP.NET の今とこれからOne ASP.NET の今とこれから
One ASP.NET の今とこれから
 
PHP-Ninjaの裏側
PHP-Ninjaの裏側PHP-Ninjaの裏側
PHP-Ninjaの裏側
 
ASP.NET Core 概要(2017年3月時点)
ASP.NET Core 概要(2017年3月時点)ASP.NET Core 概要(2017年3月時点)
ASP.NET Core 概要(2017年3月時点)
 
Node platforms
Node platformsNode platforms
Node platforms
 
Azure 高速サイトソリューション
Azure 高速サイトソリューションAzure 高速サイトソリューション
Azure 高速サイトソリューション
 
【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】
【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】
【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】
 
20180222_VxRailccトラブルシューティングセミナー_vSAN性能試験ベストプラクティス_VM知久様
20180222_VxRailccトラブルシューティングセミナー_vSAN性能試験ベストプラクティス_VM知久様20180222_VxRailccトラブルシューティングセミナー_vSAN性能試験ベストプラクティス_VM知久様
20180222_VxRailccトラブルシューティングセミナー_vSAN性能試験ベストプラクティス_VM知久様
 
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
 
【Web TECH FORUM 2017 in大阪】JavaScript UIコンポーネント の選定と活用ポイント
【Web TECH FORUM 2017 in大阪】JavaScript UIコンポーネント の選定と活用ポイント【Web TECH FORUM 2017 in大阪】JavaScript UIコンポーネント の選定と活用ポイント
【Web TECH FORUM 2017 in大阪】JavaScript UIコンポーネント の選定と活用ポイント
 
AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介
AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介
AWSでシステム構築工数を1/10にしつつ、高品質化も実現した枠組みのご紹介
 
ACRi HLSチャレンジ紹介
ACRi HLSチャレンジ紹介ACRi HLSチャレンジ紹介
ACRi HLSチャレンジ紹介
 
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampクラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
 
20160629 aws well-architected
20160629 aws well-architected20160629 aws well-architected
20160629 aws well-architected
 
ブラウザからWeb OSへ〜Web - TV連携事例からその可能性を探る〜
ブラウザからWeb OSへ〜Web - TV連携事例からその可能性を探る〜ブラウザからWeb OSへ〜Web - TV連携事例からその可能性を探る〜
ブラウザからWeb OSへ〜Web - TV連携事例からその可能性を探る〜
 

SECCON@福岡ハッカソン直前勉強会「今どきのWeb技術でスコアサーバーを改良してみよう」