特に注目されたいようなこともやってないし、やるつもりもないけど、前のBlogでわけのわからん海外からのアクセス、コメントが多くて、定期的に全消ししていた。
今回、海外からのアクセスを制限する、というオプションがあることに気づいて設定した。
でも、WordPressだけ。
個々のサイトはどうやって制限すればよいのか?
そんなオプションはない。
.htaccessを汚すのはしたくない。これで動かなくなると面倒。
調べたら、日本のIPアドレスの一覧があった。
随時更新するみたいだが、見る人もいないし、完全じゃなくても変なアクセスが防げればよいだけなので現状のもので良しとする。
ipアドレス表示で表示されるリストを使う。
4個の数字をそれぞれ2進数8桁に変換。
4ブロックをつなげて32桁の0と1にする。
サブネットマスクの桁数(/の後の数字)を左から取り出し、桁数と合わせてJSONファイルとし、全部の行からなる配列にする。
[
{
“length”: “20”,
“netAdr”: “00000001000000000001”
},
{
“length”: “20”,
“netAdr”: “000000010000000001”
},
{
“length”: “20”,
“netAdr”: “000000010000000101”
},
…
Topページのアクセス時にipアドレスを取得し、2進数8桁に変換。
arrip=ip.split(‘.’)
rs1=format(int(arrip[0]), “08b”)
4ブロックをつなげて32桁の0と1にする。
JSONファイルを順次呼び出し、アクセス元IPからJSONのサブネットマスクの桁数(/の後の数字)を左から取り出しJSONのIPアドレスと比較してOKならページを表示する。
一致しなければ、
return HttpResponseForbidden(‘Access Denied’)

