JSのfetch,xhr/iframe/canvas/WebStorage,IndexedDBでクロスオリジンは危険
Access-Control-Allow-OriginレスポンスヘッダでCORS(cross origin resource sharing)許可を判定できる
CSP(Content-Security-Policy)レスポンスヘッダあるはmetaタグで許可するJSを判定できる
=========================
2022-04-06
SAML
SSOのログイン状態を保持する認証プロバイダー(IdP)を使い各アプリ(ServiceProvider)でSSOを実現する
SSOの仕組みにはエージェント方式、リバースプロキシ方式、代理認証方式など
ユーザはWebサービスにアクセス
WebサービスからSSO認証プロバイダーサーバにSAML認証要求をPostする
SSO認証プロバイダーサーバでSAML認証を解析、ユーザに認証を転送
ユーザはそれでWebサービスにログインする
SAMLはログイン時にユーザー情報をチェック、OAuthはユーザーの情報を登録
OAuthはアプリケーションを連動させるAPIで有効なアクセストークンかを見る
アクセストークンには「いつ」「どこで」「なんのために」作られたのか分からない
OpenIDはIDトークンを使い「いつ」「どこで」「なんのために」作られたのか分かる
OAuth 2.0、OpenID Connect、SAMLを比較
OAuth 2.0:新しいアプリケーションに登録して、新しい連絡先をFacebookや携帯電話の連絡先から自動的に取得することに同意した場合は、おそらくOAuth 2.0が使われています。この標準は、安全な委任アクセスを提供します。つまり、ユーザーが認証情報を共有しなくても、アプリケーションがユーザーに代わってアクションを起こしたり、サーバーからリソースにアクセスしたりすることができます。これは、アイデンティティプロバイダー(IdP)がユーザーの承認を得て、サードパーティのアプリケーションにトークンを発行できるようにすることで実現されます。
OpenID Connect:Googleを使ってYouTubeなどのアプリケーションにサインインしたり、Facebookを使ってオンラインショッピングのカートにログインしたりする場合に使用されるのが、この認証オプションです。OpenID Connectは、組織がユーザーを認証するために使用するオープンスタンダードです。IdPはこれを利用して、ユーザーがIdPにサインインした後、他のWebサイトやアプリにアクセスする際に、ログインしたりサインイン情報を共有したりする必要がないようにします。
SAML:SAML認証は、多くの場合に仕事環境で使用されます。たとえば、企業のイントラネットやIdPにログインした後、Salesforce、Box、Workdayなどの多数の追加サービスに、認証情報を再入力せずにアクセスできるようになります。SAMLは、IdPとサービスプロバイダーの間で認証・認可データを交換するためのXMLベースの標準で、ユーザーのアイデンティティとアクセス許可を検証し、サービスへのアクセスの許可/拒否を決定します。
OAuth、OpenID Connect、SAMLの違いとは? | OktaOath: idpがトークンを発行、Webサイト間でユーザを認識し3rdからでも個人情報を使えるようになる
OpenID(OIDC): idpとJWT(トークン)で認証するOauth系のSSO、Oauthの拡張でログインが3rdからもできるようになる
SAML: idpで各アプリやAD間をXMLメッセージにより認証管理しSSOを実現
OpenIDとSAMLが同じような機能
SAMLはユーザ固有の傾向で大企業SSOが多い、OpenIDはアプリ固有の傾向でWebサイトやモバイルアプリが多い
SAMLよりOIDCの方が新しくSPAやスマホと親和性が高い
SaaSとしてOpenIDはOktaのidp、SAMLはPingFederateのidpがメジャー
=========================
2016-01-03
■XSS対策、CSRF対策、脆弱性チェック
情報処理推進機構にチェックリスト有
https://www.ipa.go.jp/security/vuln/websecurity.htmlXSS対策
フォーム送信後の確認画面ではHTMLエスケープ等でサニタイズされた内容の結果を表示
DBへのクエリについてはプレースホルダやエスケープ等でSQLインジェクションを防ぐ
target="_blank"はXSSになるので危ない、rel="noopener noreferrer"を付ける
https://b.hatena.ne.jp/entry/s/webtan.impress.co.jp/e/2020/03/13/35510 https://laboradian.com/test-window-opener/CSRF対策
前ページでhidden値を入れる
他
クッキーに具体的なものは入れない、CookieにHttpOnly属性、HTTPS通信ではsecure属性
エラーメッセージを表示しない
不要なファイルは削除
XMLの外部実態参照は禁止、サーバ上でコードが実行される
→libxml_disable_entity_loader(true)で止める、xmlをアップロードさせない/使用しない、JSON使う
PDFからHTTPリクエストが発行される
→PDFをアップロードさせない
------
//SQLインジェクション対策
$sql = "UPDATE users SET name='.mysql_real_escape_string($name).'WHERE id='.mysql_real_escape_string ($id).'";
\ " ' を最低限、\エスケープ
NUL (ASCII 0) /n /r / ' " およびCTRL+Zをエスケープしたい
//クロスサイトスクリプティング対策
表示時には<>&"をメタ文字へ変換
echo htmlspecialchars($_GET['username'], ENT_QUOTES);
$ent = htmlentities($ent, ENT_QUOTES, "UTF-8"); //100個の文字を変換
//クロスサイトスクリプティング対策
別サイトからのポストを弾く
refferを送信しないリクエストもある(別サイトのリファラを弾き、nullもしくは適切ページからを許可する)
セッションIDで判断する
//DOS対策
2重ポスト
IPと日付で2重ポストを防ぐ(同IPのポストがx秒以内を弾く)
■サニタイズの方法
DOCには生のテキスト、DBとHTMLにはエスケープ済みのものを入れる
• 入力があればhtmlエスケープしDBに入れる
• html表示はそのままhtmlエスケープ状態で出力
• Docへはhtmlエスケープを解除し表示
• htmlフォーム内表示はhtmlエスケープを解除し表示
htmlエスケープ
https://weblan3.com/html/special-character
バッククォート以外は分かり易いで文字表記でエスケープする、改行はエスケープしない
< < < 不等号(より小さい)
> > > 不等号(より大きい)
& & & アンパサンド
" " " 二重引用符
' ' ' シングルクォート,アポストロフィ
; ;: ; セミコロン
\ \ &bsol バックスラッシュ
` ` バッククォート
========
■JSONP
scriptタグを使用してクロスドメインなデータを取得する仕組みのことである。
HTMLのscriptタグ、JavaScript(関数)、JSONを組み合わせて実現される
GoogleAnalyticsのクッキーは1stパーティでサイト側がオーナでありGoogleがオーナーではない
サイト側のJSでクッキーが作成されるようなっている
クッキーが送信される相手はどこか?が重要でGoogleでなくサイト側に送信される
アクセス履歴は別途データをGoogleに送信しており、クッキーはセッション管理に使用される
■SSO
色々な方法がある、SAMLや、サイトにエージェントを組み込み+SSO認証サーバ等
ロジックを確認しないと詳しくは分からない
=========
■SSL
CAはサーバに証明書(署名)を発行
====
クライアントが接続要求
サーバが証明書(署名とRSA公開鍵を含む)を送る
クライアントが証明書を検証(
どっち?
1)署名をルート証明書のチェーン(RSA公開鍵)で複合化しドメインを確認
該当のルート証明書(RSA公開鍵)がブラウザにないと該当CAに要求?
CRLやOCSPで失効について問合せができるようだがRSA公開鍵の要求は出来なさそう
(ルート証明書はブラウザにある結局オレオレ証明書に違いない:厳密な審査の上で組込まれている)
2)クライアントが公開鍵をサーバに送りRSA秘密鍵で暗号化し送り返すとクライアントが複合化してRSA秘密鍵が正しい事を確認
)
クライアントが共通鍵(セッションキー)を生成し公開鍵で暗号化し送る
サーバが秘密鍵で共通鍵を複合
以降共通鍵暗号で通信
※ホンマか??
====
ホスト(ドメイン)を持って接続要求をし、暗号化通信後にパスやクエリパラメータを送るので、詳細は暗号化され守られている