JavaScriptインジェクション対策
1 2 3 4 |
// JavaScriptインジェクション対策1(http経由のみアクセス可能にする) ini_set('session.cookie_httponly', 1); // JavaScriptインジェクション対策2(不正なセッションIDを拒否) ini_set('session.user_strict_mode', 1); |
在宅プログラマーの備忘録として2005年に始めたブログです。
JavaScriptインジェクション対策
1 2 3 4 |
// JavaScriptインジェクション対策1(http経由のみアクセス可能にする) ini_set('session.cookie_httponly', 1); // JavaScriptインジェクション対策2(不正なセッションIDを拒否) ini_set('session.user_strict_mode', 1); |
保守しているECサイトで定期購読商品を取り扱っていますが、
定期商品の月ごとのLTVを表示する機能を作った時のメモ。
まずは月ごとの「解約率」を求める。
1 |
月内の解約者数を月初の会員数で割ったもの。 |
LTVは
1 |
定期商品の月額 ÷ 解約率 |
別ウィンドウを開く際にPOSTでパラメータを送るには、
window.openで空のページを開いてから
そこに対してSUBMITを行います。
ページ上のフォームからもできますし、
フォームのないページでもPOSTできます。
まずは、ページ上のフォームからSUBMITする場合:
JavaScript
1 2 3 4 5 6 7 |
function post_open() { window.open('', 'new_window'); document.form1.action = 'page2.php'; document.form1.method = 'POST'; document.form1.target = 'new_window'; document.form1.submit(); } |
HTML
1 2 3 4 5 |
<form name="form1"> <input type="hidden" name="param1" value="hoge"/> <input type="hidden" name="param2" value="hage"/> <input type="button" value="送信" onclick="post_open();"/> </form> |
開いたウィンドウに名前をつけて、
その名前をtargetで指定するだけなので難しくないですね。
次に、フォームのないページでPOSTする場合:
※jQueryを使っています。
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
function post_open() { window.open('', 'new_window'); // フォームを動的に生成 var html = '<form id="temp_form" style="display:none;">'; var data = { 'param1': 'hoge' ,'param2': 'hage' }; for(var x in data) { if(data[x] == undefined || data[x] == null) { continue; } var _val = data[x].replace(/'/g, '\''); html += "<input type='hidden' name='" + x + "' value='" + _val + "' >"; } html += '</form>'; $("body").append(html); $('#temp_form').action = 'page2.php'; $('#temp_form').method = 'POST'; $('#temp_form').target = 'new_window'; $('#temp_form').submit(); // フォームを削除 $('#temp_form').remove(); } |
複数のテーブルのデータを一気に削除する構文は
1 2 3 4 5 6 7 8 |
DELETE table1 ,table2 FROM table1 ,table2 WHERE table1.id = table2.id |
このような間違えると危険なDELETE文を実行するときは
面倒でもテーブルのバックアップを取ってから実行することをオススメします。
でないと一瞬で大惨事になります。(経験者談)
SSL証明書にはApache再起動時にパスフレーズの入力が必要なものもあります。
Apacheの再起動が手動のみなら毎回入力するのが最もセキュアですので、そのままで問題ありませんが
再起動を定期バッチなどで自動化したい場合は、パスフレーズの入力を省略する必要があります。
下記の方法で省略可能です。
毎回入力するよりもセキュリティ上のリスクはあるものの、
これでパスフレーズありの場合でも再起動を自動化できます。
まず、パスフレーズを出力するスクリプトを作成します。
例えば、パスフレーズが「AAAABBBB」だったとして
/etc/httpd/conf.d/passphrase.sh
1 2 |
#!/bin/sh echo 'AAAABBBB' |
スクリプトのパーミッションを変更しておきます。
1 |
chmod 500 /etc/httpd/conf.d/passphrase.sh |
次に、/etc/httpd/conf.d/ssl.confで
1 |
SSLPassPhraseDialog builtin |
この行をコメントアウトして、下記を追加します。
1 |
SSLPassPhraseDialog exec:/etc/httpd/conf.d/passphrase.sh |
これで、再起動した際にパスフレーズの入力を省略できます。