株式会社Flatt Securityから、Web開発エンジニアとして就職予定の皆さんに是非知ってほしい セキュアコーディングの基礎知識のクイズを3問用意しました。 全問正解して、同期や友達にシェアしよう!
以下のように、クエリパラメータの入力値がDOMに反映される機能がとあるWebサイト(以下、サイトA)で提供されていました。
このサーバーの実装が以下のソースコードのようなとき、 どのようなリスクがあると考えられるでしょうか。
const http = require('node:http');
const {URL} = require('node:url');
const portNum = 8082;
const host = 'localhost';
const server = http.createServer(function(request, response) {
const url = new URL(`http://${host}:${portNum}${request.url}`);
const name = url.searchParams.get('name') || "";
response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
if(name === "") {
response.end('<h1>誰かさん、お誕生日おめでとう!!</h1>');
}else{
response.end(`<h1>${decodeURI(name)}さん、お誕生日おめでとう!!</h1>`);
}
});
console.log(`access http:/${host}:${portNum}`);
server.listen(portNum);