February 11(Sat), 2012
■[etc] Apacheでアクセス制限をする
Apacheでアクセス制限をしようと頑張った結果こうなりました.
1. やりたいこと
私がやりたかったのは以下のことです.
ここでのアクセス制限とは,192.168.0.0/24なら自由にアクセスできる,ただしそれ以外の場合はBASIC認証が必要というやつです.
また,/docroot/{foo,bar}は指定した拡張子(ここでは.htmlと.php)のみ外部から参照できます.
2. 勘違いしてたこと
アクセス制限がホスト制限と認証しかないということです.
<Directory>とか<Files>とかはただ単にその2種類の制限を操作するかどうかのif文でしかなかった,というのに気付くのにえらい時間がかかってしまいました.
3. アクセス制限書く
<Directory /docroot> Order Deny,Allow Deny from All Allow from 192.168.0.0/24 AuthUserFile /path2pass AuthName "Nyan" AuthType Basic require valid-user Satisfy Any </Directory>
4. 拡張子の制限を書く
<Directory /docroot/foo>
<Files "*">
Order Deny,Allow
Deny from All
Satisfy All
</Files>
<Files "">
Order Deny,Allow
Allow from All
Satisfy Any
</Files>
<FilesMatch "\.(html|php)$">
Order Deny,Allow
Allow from All
Satisfy Any
</FilesMatch>
</Directory>
<Files>と<FilesMatch>は同時に適用&上書きされるらしいのでこう書きました.
ちなみに,""はttp://example.com/foo/の様にDirectoryIndexを省略した時用です.
5. モウヒトコエ
ただし上記のままではttp://example.com/fooの様に最後にバックスラッシュが付いていない場合にアクセスできません.
なぜなら<Files "*">にfooとしてマッチしてしまうからです.
そこで,<Files "*">を<Files "^(((([^f]*)*(f+[^o][^f]*)*)*)*(f+[^o][^f]*)*)*$">にしてもいいのですが,よくわからないのでfooを許可します.
<Files "foo">
Order Deny,Allow
Allow from All
Satisfy Any
</Files>
6. 最後に
これだとttp://example.com/fooでアクセスできますが,ttp://example.com/foo/fooにもアクセスできてしまいます.
なので,次のやつを書きました.
<Location /foo/foo> Order Deny,Allow Deny from All Satisfy All </Location>
<Location>は<Files>の後に評価されるので上書きされてアクセスが禁止されます.
これでだいたいうごくとおもいます.
ちゃんと動いていなかったり,もっと上手い方法がある,まちがってる,とか教えていただけるとうれしいです.
mod_rewriteとかでできそう?
あと,私が実際にやった環境ではVirtualHostがからんでたりするのでちょっと違うかもしれないです.
7. 関係ないこと
httpd.confを0から書くというのをやってみたらおもしろかったです.
Apache3.0になるとこの辺をもっときれいに書けるみたい?
参考書:Apache公式サイト
Apacheセキュリティ
Apacheクックブック
January 12(Thu), 2012
■[Books] 1: Best Software Writing
読みました!
とても面白かったです.特にソーシャルソフトウェアについての内容はとても興味深いです.あとWIPOの話など読んでいて面白い(そして知るべきである)ストーリなどが多くありとても勉強になりました.
- 作者: Joel Spolsky,青木靖
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/21
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 187回
- この商品を含むブログ (114件) を見る
July 25(Mon), 2011
■[C++][Boost]Boost.PtrContainer
Boost.PtrContainerのptr_array<>というのを使ってみました.
中身をポインタとして保持して,アクセスする時はポインタの先の参照を返してくれる粋なやつです.
ptr_array<>はptr_vector<>とかに比べてちょっと特殊かも.
実体の供給方法とかnullの保持とか.
>>|cpp|
#include <cassert>
#include <iostream>
#include <iterator>
#include <boost/ptr_container/ptr_array.hpp>
#include <boost/range/algorithm/copy.hpp>
const unsigned size = 10;
int main(){
boost::ptr_array<int, size> numbers;
// 要素(実体)があるかどうかチェックできる.当然無い.
assert(numbers.is_null(1) == true);
// arrayの場合はpush_backとか当然できないので,
// replaceという関数で置き換えてnewする.
for(unsigned i=0; i<size; ++i)
numbers.replace(i, new int(i));
// 実体がある.
assert(numbers.is_null(1) == false);
const int n = numbers[1]; // n==1
// (イテレータでも)アクセスする時は参照なので,中身がポインタとか関係ないでござる.
boost::copy(numbers, std::ostream_iterator<int>(std::cout, ","));
std::cout << std::endl; // 0,1,2,3,4,5,6,7,8,9,
}
||<
April 20(Wed), 2011
■[C++][Boost]PropertyTreeのptreeをiterationする
ちょっと調べたのでメモです.
以下の様なiniファイルのKeywordsを順番にiterationしていくのが目的です.
// trends.ini
[Keywords]
触手 = 秋猫
しまぱん = 桜花
縞ぱん = 桜花
縞パン = 桜花
#include <iostream> #include <boost/property_tree/ini_parser.hpp> namespace ptl = boost::property_tree; int main(){ ptl::ptree pt; read_ini("trends.ini", pt); const auto& keywords = pt.get_child("Keywords"); auto it = keywords.begin(); const auto end = keywords.end(); for(; it!=end; ++it) std::cout << it->first << " : " << it->second.data() << std::endl; // 触手 : 秋猫 // しまぱん : 桜花 // 縞ぱん : 桜花 // 縞パン : 桜花 }
・・・終わりです><.
April 08(Fri), 2011
■[C++][Xtal]AnyPtrとxtal::undefinedの比較
バージョンはXtal Unofficial Wikiのr429です.
Xtalスクリプトで定義したbooleanの値を取得しようとした所,undefinedと==が成り立っちゃいました.
// .xtal bool_true : true; bool_false : false; // .cpp const xtal::CodePtr& code = load_and_call(the_file); const auto& bool_true = code->member(Xid(bool_true)); const auto& bool_false = code->member(Xid(bool_false)); assert(bool_true != xtal::undefined); // こっちは期待通り assert(bool_false == xtal::undefined); // あれ? // 解決策? assert(!xtal::is_undefined(bool_true)); assert(!xtal::is_undefined(bool_false)); // パーペキ
てっきりoperator==で良いのかと思ってましたが,ダメなんですね.
ソースコードを読んでたらxtal::is_undefined(...);というのを発見.
これを使ったら期待通り動いてくれました.