色々
思いついたことを色々やっていく。
Helmetを使う
https://expressjs.com/ja/advanced/best-practice-security.html#use-helmet
expressで推奨されてた。
$ npm install --save helmet
インストールして追記
var helmet = require('helmet')
app.use(helmet())
効果はよく分からない。
https://qiita.com/qianer-fengtian/items/148602c437e1703aa764
とか参照。
Javascriptでhtmlspecialchars
PHP使ったときなんかこんなのあったよなーと思って探してみたら、javascriptではないらしい。なので自分で関数作って対応するそうな。ちょうどStackoverflowに同様の質問があった。
https://stackoverflow.com/questions/1787322/what-is-the-htmlspecialchars-equivalent-in-javascript
function escapeHtml(text) {
return text
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
replaceで一個ずつ置き換えてく。
入力文字数チェック
未入力だの、長いやつを弾く。
if (req.body['user_message'] === '') {
res.status(400).send('ないようがないよう')
return;
}
if (req.body['user_message'].length > 400) {
res.status(400).send('ないようがながいよう')
return;
}
if (req.body['user_name'].length > 20) {
res.status(400).send('なまえがながいよう')
return;
}
長さ見てるだけだね。
新しい投稿が上に来るようにする
data.reverse();
こんな簡単なのだな。ただ編集→更新したやつは上に来ない。
日時をGMTにする、形式を変える
こちらに書いてあることを読み解きつつ
function fmtdate(){
let o = new Intl.DateTimeFormat('jp-JP', {
weekday: 'narrow',
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
fractionalSecondDigits: 3
})
return o.format(new Date())
}
こんな関数を作った。今まで
2022-01-02T11:50:36.446Z
こんな表示でUTCだったのが
2022/01/02(日) 20:51:07.812
こんな表示でGMTになった。
とりあえず終わり
こんなところかなぁ。あと最終のソース。