php simple html dom parser でエラーというかパースというか解析というかが正常に出来なかった件

htmlも問題無いのに何故か特定のタグが取得出来ない現象が発生。
突き詰めた結果、特定の文字列を含む場合に発生することが分かった。
結局は文字コードが原因だったってわけ。またお前か!
取得した結果をutf8に変換したところ問題無く取得できた。

<?php
$source = file_get_contents('http://www.google.com/');
$source = mb_convert_encoding($source, 'utf8', 'auto');
$dom = str_get_html($source);

参考サイト
PHP Simple HTML DOM Parserで文字化けするときの対処法

sshpass使うとsshでオプションにパスワード指定ができる

インストール

yum install -y epel-release
yum --enablerepo=epel install sshpass

sshpass -p password scp test.php user@sample.ne.jp:/home/test.php

低予算でのおすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html

安全靴や作業着を買うならこちら。
http://azmaya.jp

sshの認証についてまとめ

sshバージョン
ssh -V
OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

■基礎知識
opensslとopensshは違う
http://d.hatena.ne.jp/end0tknr/20130723/1374508157
opensshで使用される暗号化方式(arcfour等)はman ssh_configで確認する

(ケースによるだろうけど)sftpも結局はsshの認証を行って接続する。
なのでsshの接続が上手くいけばsftpの接続も基本上手くいく。

sshの設定ファイル
/etc/ssh/ssh_config
→クライアント側の設定

/etc/ssh/sshd_config
→サーバー側の設定

優先順位
~/.ssh/config
/etc/ssh/ssh_config

sshの認証には多数ある
publickey・・公開鍵認証
gssapi-keyex,gssapi-with-mic・・知らん(api使う認証ぽい)
keyboard-interactive・・キーボードインタラクティブ認証
password・・パスワード認証

※keyboard-interactiveとpasswordはほとんど違いはないらしい

sshの認証で困った時の観点
●エラーの出るサーバーだけでなく、成功するサーバー(検証サーバー)でも確認を行い、比較する

デバッグモードで接続する(vは3つまでつけられる)

ssh -v <ipアドレス>

※vオプションについてはssh接続の詳細が見れるので困ったときはマスト。

認証方法の指定

ssh -o PreferredAuthentications=<認証方法>

※認証方法には、keyboard-interactiveやpasswordを指定する

暗号化方式の指定

ssh -c <暗号化方式>

※暗号化方式には、aes128-ctrやarcfour256を指定する

debug考察1

debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,keyboard-interactive

上記の場合、順番は分からんけど、公開鍵、gssapi、キーボードの認証が試される
(例えばキーボード認証を最初に実行したい場合はssh_config(または~/.ssh/config)に
「PreferredAuthentications keyboard-interactive」を追加すればok)
上記の場合、パスワード認証は許可されていないので「PreferredAuthentications=password」を指定しても
debug1: No more authentication methods to try.
というエラーがでる。

debug考察2

debug1: kex: client->server aes128-ctr hmac-sha1 none

サーバーに接続する際に、どの暗号化方式を使っているか。
https://blog.n-z.jp/blog/2017-05-20-openssh-config.html

暗号化方式を限定したい場合は、~/.ssh/configにCiphersの行を追加する。MACsはmacの場合ぽい。

Ciphers aes128-ctr,aes192-ctr,aes256-ctr
MACs hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com

※あくまでクライアント側の設定なので変更してもsshdの再起動は不要

変更後、ssh -v を実行すれば暗号化方式が変わっていることを確認できる

https://blog.sa10shun.net/?p=77
sshd_configでCiphersを指定すれば無効化したい暗号化方式の指定が可能

debug考察3

Received disconnect from <ip>: 2: Too many authentication failures for root

今回長きに渡って苦しめられたエラー
これは「認証の試行回数が基準値を超えた」場合に出るエラーとなる

debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,keyboard-interactive
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
中略
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug1: Trying private key: /root/.ssh/id_rsa
debug1: read PEM private key done: type RSA
Received disconnect from <ip>: 2: Too many authentication failures for root

これは、gssapiに失敗してpublickeyにトライしようとしたけど、1回失敗したからエラーになったんだと思われる
(デフォルトはMaxAuthTries=6ぽいけど、これをMaxAuthTries=0にすると1回の失敗でエラーとなる)

これについては「PreferredAuthentications=keyboard-interactive」を指定すれば接続できる(最初からkeyboard-interactiveでトライする)
なお「PreferredAuthentications=password」としてもこのケースだとpassword認証が許可されていないので以下のエラーとなる

debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,keyboard-interactive).

あと、winscpで接続しようとした際、バックグラウンドでpagentを起動していた時も同じエラーが発生。
これは認証キーが登録されているとその回数分接続を試みるため、結局MaxAuthTriesの値を超えることになりエラーが発生する
ので、pagentを止めればok

あと、パスワードで制限数よりも多く失敗した場合もこのエラーが出るぽい

認証方式をローテーションした時、公開鍵をローテーションしたとき、パスワードをローテーションした時、
とにかくいろんなパターンでこのエラーがでるぽくて今回こいつにめっちゃ苦しめられた

メモ
sshd_configでパスワード認証が禁止(PasswordAuthentication no)されていても、キーボード認証(ChallengeResponseAuthentication yes)
になっていれば、普通にコマンドラインからパスワード入力でログインできる
なのでパスワードでのログインを禁止したければ、上記いずれもnoにしないといけない。

その他の参考サイト
http://www.unixuser.org/~euske/doc/openssh/book/chap3.html
http://www.unixuser.org/~euske/doc/openssh/book/chap7.html
http://www.unixuser.org/~euske/doc/openssh/book/appendix.html

日本以外からのアクセスを全て遮断してみた(メジャーなbotは除く)

awsで運営を始めたECサイトapacheログをチェックしてみたら全世界の各国から総攻撃と言ってもおかしくないくらいアクセスされていて、肝心の日本からは全くアクセスが無く、一個ずつdenyしてたらきりがないのでいっそのこと日本以外からのアクセスを拒否する設定に変更してみた。どうせ海外への発送にも対応していないのでひとまずは問題ないしw

googleとかのメジャーなbotだけは許可する設定も追加済み。

参考サイト
http://wparia.com/akukin/
IPアドレスで日本国外(海外/外国)からのアクセスを制限する.htaccess CGI's

画像がぼやける場合の対応

ロゴの表示でpcだとクッキリなのにスマホとかだとぼやける現象が発生。
画像の解像度を上げるとスマホではくっきりするけど今度はPCでぼやけてしまう。
なので拡大縮小に対応したベクター画像にするためsvg形式で保存すること。ie9以上から。
・・・と思ったらphotoshopsvgの書き出しが出来ない!svgで書きだそうとするとずっとローディング中になってしまう。。なので別の方法を検討

どうやらsvgへの書き出しが出来ないのはphotoshop cc 2018の不具合ぽい。なので2017にバージョンダウンしてみる。

2017版入れたらあっさりsvgの書き出しが出来た。バージョンダウンではなく2018と併存するぽい。
・・・がしかしsvg形式にしてみたらなんか表示がおかしい。画像を組み合わせてロゴ作ったのが原因なんだろうな。

もうsvgは諦めてメディアクエリでサイズによって読み込む画像を変える方法でやってみる。

・・・と思ったけどロゴとか重要な画像はcssでの表示をしない方が良いぽい。

なのでスマホ優先で実際の表示より少し大きめの画像をロゴにセットしてpcは多少ぼやけても我慢しておく。

css ie11 display-cellで画像がはみ出す件

ie11でdisplay-cellに指定した画像がセル内に収まらず本来のサイズで表示されてしまう件の対応。
display:tableにtable-layout: fixedを追加すればok

display: table;
table-layout: fixed;
width:100%; /*widthの指定も必要ぽい*/

css initialはie11が対応していないので使わないこと

width:initial;

だけだと効かないので↓のようにする

width:initial;
width:auto;

参考サイト
initialとautoでmin-width,max-width(height)をリセット – webdev