P83 JSONインジェクション

script要素を利用してJSONを読むことによって、ブラウザに 他のサービスのAPIが提供するJSONファイルを読み込ませ、その内容を不正に入手する手法

 

Web API: The Good Parts

Web API: The Good Parts

 

 

 

P89 sexとgender

sexは生物学的な性別を表し、genderは社会的・文化的性別を 表す。

なお、Facebookでは、2014年2月に50種類以上の性別を入力できるようにした。

 

[独自調査内容]

sexはISO5218に定義されている。

genderに関する国際的な定義は現時点ではなさそう(WHOが定義したみたいなのを昔見たような気が)。Facebookの定義を元に決定するのがぶれが少なそう。てか、今時sexはみたいな定義をするのは勉強不足だみたいな記事は多くひっかかってくるが、じゃあgenderをどう定義するのか?に踏み込んだ記事が殆ど無かった事が文句ばかり言ってと感じてしまった。まぁこの問題は簡単に語れるものではないから炎上さける為に触れていないというのもあるだろうが。英語で調べたら比較的簡単に見つかるのかもしれないが、一旦調査はこの程度に留める。

 

Web API: The Good Parts

Web API: The Good Parts

 

 

P76 Chatty API

おしゃべりAPI

ネットワークの トラフィックを増加させ、クライアントの処理の手間を増やし、なんだか面倒くさい仕様という印象を抱かせる。

出来るだけAPIのアクセス回数が減るようにし、どの様に使われるかをしっかり想像して、使いやすいAPIを設計 すること。

 

Web API: The Good Parts

Web API: The Good Parts

 

 

P86 JSONの項目名の命名規則

JSONではキャメルケースを利用した方が良い。理由としては、JavaScript命名規約においてキャメルケースの利用をルール付けしているケースが多いため。

とはいえ、Twitter,Facebook,Instgramなどスネークケースを用いているAPIも多い。

一番重要なのは、API全体を通して統一するという事である。

 

また、変な省略形は極力利用しない。データ転送量の都合でどうしても少なくする事はあるかもしれないが、極力略語は用いずに短く分かりやすい名称付けをすること。

 

最後に 単数形、複数形に気をつけ、使い分けること。googleJSONスタイルガイドのようにデータを配列で返す場合は複数形、それ以外は単数形にする という明快さにしてもよい。

Web API: The Good Parts

Web API: The Good Parts

  • 作者:水野 貴明
  • 発売日: 2014/11/21
  • メディア: 大型本
 

 

MyBatisからTomcatのJNDIへ接続ができない

事象

Tomcatのserver.xmlと、WAR側のweb.xmlにJNDI登録に関する記述を行った。
その後、MyBatisの定義ファイルにJNDIをデータソースとして接続しようとしたが失敗する。

原因

  • WARにJDBCのJARを突っ込んでいたので、Tomcat側でJARを認識できていなかった。

  →TomcatのlibにJARを配置する。

  • server.xmlとweb.xmlのJNDI名をcomp/env/jdbc/MYSOURCEとcomp/envまで記述してしまっていた。

  →Tomcatではデフォルトではcomp/envに登録されるため、server.xmlとweb.xmlからcomp/envを削除する。

TeraTermを絡めたSSHの多段ポートフォワード利用方法

経緯

踏み台を一つだけ踏む場合は、TeraTermSSH転送機能を用いれば簡単にSSHポートフォワードを行える。
これが行えれば、踏み台に一度FTPファイル転送を行い、踏み台から更に接続先にファイルを転送するみたいな不毛な事をせずに、WindowsWinscpなどを用いて直接ファイル転送を行う事ができる。
しかしながら、踏み台を二つ以上踏まないといけない場合は、TeraTermSSH転送機能だけでは残念ながら行えなさそうである(もしできるのであれば誰がご教授願います)。
素直にポートフォワードをコマンドラインから行えばいいのだが、クライアントがWindowsの場合はSSHがインストールされていない場合もある。
サーバーにさえ接続できればSSH転送を(できるユーザーアカウントを知っていれば)コマンドラインベースで入力できるので、TeraTermと組み合わした方法をメモっておく。

想定経路

接続先のSFTP(SSHと同じポート番号22)を用いる場合を説明する。
接続先の利用したいのがFTPであれば23、HTTPであれば80と読み替えると良い。

方法

1.TeraTermの[設定]-[SSH転送]を開き、以下の様なポートフォワードの設定を追加する。
 その後、[設定]-[選定の保存]を開き設定を保存し、一度TeraTermを閉じる。

2.再度TeraTermを開き、1.1.1.1経由で、2.2.2.2にアクセスする。

3.以下のコマンドを実行する。設定が誤ってなければ、接続先にログインが行われる。
 ssh -g -L 9922:3.3.3.3:22 3.3.3.3 (※1)

4.接続したコンソールを置いた状態で、Winscpなどで以下の様に接続できれば、無事接続先にポートフォワードが行われる。

※1
当例は、接続端末~踏み台2までをTeraTermでポートフォワードし、踏み台2~接続先をsshコマンドを用いてポートフォワードしている。本当は、接続端末~踏み台1までをTeraTerm、踏み台1~接続先までをコマンドで行った方が、2.の手順を簡略化できるのでそちらの方が好ましいと思われる。試した環境が踏み台1でsshコマンドを転送させる権限が無いためなのか転送が行えなかったので、一応自分で問題なく接続できた方法を記載しておく。

その他

  • ssh -Lがポートフォワードするためのオプションである。3.3.3.3となっている個所でSSH接続するユーザーを変更させたい場合は、username@3.3.3.3とすればよい。
  • 例がWinscpなのでSSHポートフォワード接続した後で、Winscp接続を行うのに利用するユーザーをどれを使うのか想像しにくいかもしれないが、Winscp接続するためのユーザー/パスワードを指定する。例えば、MySQLであればMySQLに接続するためのユーザー名/パスワードを指定すると思えば理解しやすい(ならそれを書けよという話であるが、図のキャプチャ取り直すの面倒だったので…)。
  • 9922とポート番号を置いているとこは、被らなければ何のポート番号を用いても構わない。なので、踏み台1と踏み台2のポート番号はわざわざ変更せずに同じのを使えばよい。自分は、元のポート番号に99を付けたり、10000や20000を足した値をよく使う。