金曜日, 7月 18, 2025
No menu items!
ホーム ブログ ページ 6725

どれも気になる! 無印良品の元スタッフが選ぶ、“買ってよかったアイテム10選” 「布団カバーかわいい」「同じもの愛用してます」



どれも気になる! 無印良品の元スタッフが選ぶ、“買ってよかったアイテム10選” 「布団カバーかわいい」「同じもの愛用してます」

これは参考になる。



Source link

Views: 0

サーモスの深型フライパンなら、唐揚げもパスタも煮込みハンバーグもこれひとつでOK!



サーモスの深型フライパンなら、唐揚げもパスタも煮込みハンバーグもこれひとつでOK!

真空断熱タンブラーなどの人気商品を多数販売するTHERMOS(サーモス)から超深型フライパン「デュラブルシリーズ マルチパンKFJ」をご紹介します。一般的なフライパンよりもかなり深型設計なので、唐揚げなどの揚げ物をはじめ、パスタをゆでたり、煮込み料理だって出来ちゃいます。IH・ガス火両対応なので、どのご家庭でも問題なく使うことができますよ



Source link

Views: 0

セッション認証とは?React × Expressでハンズオンしながら学ぶ #cookie – Qiita



セッション認証とは?React × Expressでハンズオンしながら学ぶ #cookie - Qiita

情報安全確保支援士の勉強を進める中で、「セッション管理の脆弱性」が気になったので、実際に手を動かして再現し、理解を深めてみました。

この記事では、初心者の方でも試せるように、セッション認証と簡易的なセッションハイジャックについてわかりやすく紹介します。
興味のある方は、ぜひ一緒にハンズオンをしてみましょう。

セッション認証は、Webアプリケーションにおいて、ユーザーのログイン状態を保持するための仕組みのひとつです。
多くの場合、ユーザーがログインに成功すると、サーバー側でセッションIDを発行し、それをブラウザにクッキーとして保存します。
以後のリクエストでは、そのセッションIDをもとに「このリクエストは誰のものか?」をサーバー側で判別し、認証された処理を実行します。

参照

このハンズオンでは、ログインフォームを実装して、簡易的なセッションハイジャックの再現を行います。
以下のツールを事前に準備しておいてください。

環境

  • OS: macOS Sonoma 14.6.1
  • Node.js: 20.16.0
  • npm: 10.8.2
  • Vite: 6.2.0
  • ブラウザ: Google Chrome

クライアント側:ViteでReactプロジェクト作成

アプリは公式でも推奨されている Vite を使って作成します。

# プロジェクトを作成(テンプレートとして React を指定)
npm create vite@latest session-auth-client -- --template react

# プロジェクト配下に移動
cd session-auth-client

# パッケージをインストール
npm install

# ローカルサーバーを立ち上げる
npm run dev

スクリーンショット 2025-04-10 22.26.16.png

Vite + React の初期画面が表示されましたか?
おめでとうございます!クライアント側のセットアップが完了しました。

参考

サーバー側: Express のセットアップ

次に、バックエンドの簡単な HTTP サーバーを Express を使って構築していきます。
まずは「Hello World!」が表示させてみましょう。

# package.json を初期化
npm init -y

# 必要なパッケージをインストール
npm install express express-session cors

# サーバーのコードを書くファイルを作成
touch hello-world.js

続いて、hello-world.js ファイルに以下のコードを記述してください。

hello-world.js

const express = require('express')
const app = express()
const port = 3000

// ルート設定
app.get('/', (req, res) => {
  res.send('Hello World!')
})

// サーバー起動
app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

ターミナルで以下のコマンドを実行して、サーバーを起動しましょう。

ブラウザで http://localhost:3000 にアクセスしてください。


スクリーンショット 2025-04-10 22.20.49.png

Hello World! が表示されましたか?
おめでとうございます!サーバー側のセットアップが完了しました。

参考

ここからは、ログイン機能を実装していきます。
まずはクライアント側( React )で、ログインフォームのUIを作ってみましょう。

ReactでログインUIの実装

React プロジェクトの App.jsx に以下のコードを記述してください。

App.jsx

import { useState, useEffect } from "react";
import axios from "axios";

axios.defaults.withCredentials = true;

function App() {
  const [user, setUser] = useState(null);
  const [form, setForm] = useState({ username: "", password: "" });

  const fetchUser = async () => {
    try {
      const res = await axios.get("http://localhost:4000/me");
      setUser(res.data.user);
    } catch {
      setUser(null);
    }
  };

  useEffect(() => {
    fetchUser();
  }, []);

  const login = async () => {
    try {
      await axios.post("http://localhost:4000/login", form);
      fetchUser();
    } catch {
      alert("ログイン失敗");
    }
  };

  const logout = async () => {
    await axios.post("http://localhost:4000/logout");
    setUser(null);
  };

  return (
    div style={{ margin: 20 }}>
      h2>セッション認証デモ/h2>
      {user ? (
        
          p>ようこそ{user.username}さん/p>
          button onClick={logout}>ログアウト/button>
        />
      ) : (
        
          input  style={{ marginRight: 20 }}
            placeholder="username"
            onChange={(e) => setForm({ ...form, username: e.target.value })}
          />
          input style={{ marginRight: 20 }}
            placeholder="password"
            type="password"
            onChange={(e) => setForm({ ...form, password: e.target.value })}
          />
          button onClick={login}>ログイン/button>
        />
      )}
    /div>
  );
}

export default App;

ログインフォームができたら、開発サーバーを再起動して、動作を確認してみましょう。


スクリーンショット 2025-04-10 22.30.09.png

usernamepassword の入力欄が表示されましたか?
これでクライアント側のログイン画面が完成です。

※ まだサーバー側と通信していないので、ログイン処理そのものは動きません。
では、次はログイン情報をサーバーに送信する処理を実装していきましょう。

Expressでセッション認証のサーバー実装

次に、セッション認証のためのサーバーを実装していきます。

まず、プロジェクト直下に server.js を作成してください。

続いて、以下のようなコードを server.js に記述してください。

server.js

const express = require("express");
const session = require("express-session");
const cors = require("cors");

const app = express();
const PORT = 4000;

// CORSの設定(Reactアプリからのアクセスを許可)
app.use(cors({
  origin: "http://localhost:5173", // React側のURL
  credentials: true
}));

// JSONパースの設定
app.use(express.json());

// セッションの設定
app.use(session({
  secret: "my-secret-key",
  resave: false,
  saveUninitialized: true,
  cookie: {
    secure: false,
    httpOnly: false,
  },
  genid: function(req) {
    return "user-1234"; 
  }
}));

// ユーザー認証
const USER = {
  username: "user1",
  password: "pass1"
};

// ログイン処理
app.post("/login", (req, res) => {
  const { username, password } = req.body;
  if (username === USER.username && password === USER.password) {
    req.session.user = { username };
    return res.json({ message: "ログイン成功" });
  }
  res.status(401).json({ message: "認証失敗" });
});

// 認証チェック
app.get("/me", (req, res) => {
  if (req.session.user) {
    return res.json({ loggedIn: true, user: req.session.user });
  }
  res.status(401).json({ loggedIn: false });
});

// ログアウトの処理
app.post("/logout", (req, res) => {
  req.session.destroy(() => {
    res.json({ message: "ログアウトしました" });
  });
});


// サーバー起動
app.listen(PORT, () => {
  console.log(`Server running on http://localhost:${PORT}`);
});

では、サーバーを起動しておきましょう。

これで実装は終了です。お疲れ様でした。

動作検証

では、React側のフォームからログインしてみましょう。
ユーザー名・パスワード( user1 / pass1 )を入力してログインボタンを押してください。
「ようこそ、user1さん」が表示されたら成功です。おめでとうございます!


スクリーンショット 2025-04-11 22.53.07.png

本記事では、実際にセッションIDを外部から知っている状態を仮定して、「もし漏洩していたらどうなるか」を再現することで、セッションハイジャックの影響と対策を体験できる構成にしています。

ブラウザの「検証ツール」>「Application」から connect.sid の値をコピーしてください。
以下のようにターミナルからcurl コマンドを使ってリクエストを送信してください。

スクリーンショット 2025-04-12 7.47.43.png

curl -H "Cookie: connect.sid=s%3Auser-1234.vaX4V%2BMOA3Vhz4nbV0ZFGgkI6IQaiwMYY999yTN33VA" http://localhost:4000/me

# 以下のようにユーザー情報が返ってきたら成功
{"loggedIn":true,"user":{"username":"user1"}}

usernamepassword を入力していないのに、ユーザー情報が返ってきましたね。

4-(iv)-a ログイン成功後に、新しくセッションを開始する。
利用者が新しくログインしたセッションに対し、悪意のある人は事前に手に入れたセッションIDではアクセスできなくなります。

引用

それでは、ログイン成功時にセッションIDを再生成するように変更して、セッションハイジャックへの防御策を講じてみましょう。

サーバー側の修正

これまでのコードでは、あえて検証しやすくするためにセッションIDを固定値にしていました。
以下のように、genid オプションを削除して、デフォルト動作に戻しましょう。

server.js

app.use(session({
  secret: "my-secret-key",
  resave: false,
  saveUninitialized: true,
  cookie: {
    secure: false,
    httpOnly: false,    
  },
  // ↓ genidをコメントアウト 
  // genid: function(req) {
  //   return "user-1234"; 
  // }
}));

genid
新しいセッションIDを生成するために呼び出す関数。セッションIDとして使われる文字列を返す関数を提供する。

引用

検証

ブラウザの検証ツールで、connect.sid の値を確認してみましょう。
ログインのたびにセッションIDが変わっていることが確認できれば、正しくセッションを再生成できています。

検証1:ログイン直後

スクリーンショット 2025-04-11 23.30.31.png

検証2:一度ログアウト → 再ログイン

スクリーンショット 2025-04-11 23.32.03.png

値が変わっていることが確認できましたか?

これで、事前に盗まれたセッションIDを無効化できるようになり、セッションハイジャックに対する1つの対策となります。

さらに理解を深めるために

ここまで実装できた方は、次のステップにもチャレンジしてみてはいかがでしょうか?

  • ローカル環境にHTTPSを導入して、Secure 属性の効果を体験する
  • トークンを使った認証方式に切り替えてみる
  • セッション認証とJWT認証の違いを比較してみる

この記事では、初心者の方でも試せるように、セッション認証と簡易的なセッションハイジャックについてわかりやすく紹介しました。

自分で手を動かして体験すると、やっぱり理解が深まりますね。

参考書や過去問だけを眺めているよりも、実際に実装しながら学ぶことで体系的に身につけられると感じました。

とはいえ、時間かかるのがちょっとした難点…。でもその分、確かな手応えがあると思います。

私の所属する日本システム技研では、webエンジニアを募集しています。
興味のある方は、ぜひ求人情報をご覧ください。





Source link

Views: 0

懐かしのゲームブック風RPG『ほらふき山の魔理沙』SteamとNintendo Switchで9月19日に発売決定。霊夢を操作して本の世界へ飛び込み、紅魔館の面々から助言を受けつつ魔理沙を探す




懐かしのゲームブック風RPG『ほらふき山の魔理沙』9月19日に発売決定。Steamに加えてNintendo Switchでも



Source link

Views: 0

【男性が選ぶ】「マジでうまい」と思うカップ焼きそばランキング! wwwwww


1: 名無し 2025/04/06(日) 11:02:49.73 ID:yBnN8V6/0● BE:837857943-PLT(17930)
ねとらぼでは「『マジでうまい』と思うカップ焼きそばはどれ?」というアンケートを実施しました。
「男性」と回答した人の915票を基にした結果を紹介します。
●第1位:ペヤング ソースやきそば
第1位は、243票を集めた「ペヤング ソースやきそば」でした。まるか食品から1975年に発売されたカップ焼きそばです。本格的な鉄板焼きそばを
イメージして開発された商品で、四角い容器を採用。「顔は四角でも味はまろやか」のフレーズとともに、長年にわたって愛され続けているロングセラー商品です。
●第2位:日清焼そばU.F.O.
第2位は、219票を集めた「日清焼そばU.F.O.」でした。日清食品から1976年に発売されたカップ焼きそばです。商品の開発にあたり、
日本人の食習慣において食器の形状としてなじみ深い「皿型」の容器を採用。カップ焼きそばとしては後発の商品であったものの、
容器での差別化と「U.F.O.」のネーミングで、若者を中心に幅広い層からの支持を集めました。
●第3位:明星 一平ちゃん夜店の焼そば
第3位は、122票を集めた「明星 一平ちゃん夜店の焼そば」でした。「一平ちゃん」シリーズは、1993年に明星食品から発売されたカップラーメン
「一平ちゃん」から始まりました。「平成の時代で1番のラーメンになる」という願いが込められていて、「一平ちゃん夜店の焼そば」は1995年に誕生。
夜店の屋台の焼きそばをイメージした、香ばしくコクのあるスパイシーなソースが特徴です。
●第4位:マルちゃん やきそば弁当
第4位は、90票を集めた「マルちゃん やきそば弁当」でした。
1975年に東洋水産から発売されたカップ焼きそばです。現在は北海道を中心に販売されている地域限定商品ですが、本州で発売された後、
1976年から北海道でも発売。
●第5位:マルちゃん ごつ盛り ソース焼そば
第5位は、89票を集めた「マルちゃん ごつ盛り ソース焼そば」でした。マルちゃんブランドで知られる東洋水産のカップ焼きそばです。
「ごつ盛り」は、「ごっつい大盛り」をコンセプトに、豊富なラインアップとお得感のある価格で知られる人気シリーズ。
https://news.yahoo.co.jp/articles/e7adae189d7edc5baa566b6d68d0d2205ba39c7f

引用元:https://hayabusa9.5ch.net/test/read.cgi/news/1743904969/


続きを読む



Source link

Views: 0

意欲作アクションRPG『Rise of Rebellion~地罰上らば竜の降る~』Steamにて4月22日発売へ。強敵を方向入力パリィなどで下す緊張のバトル、元フロムスタッフによる話題作 – AUTOMATON


講談社ゲームクリエイターズラボは4月13日、『Rise of Rebellion~地罰上らば竜の降る~』を4月22日に発売すると告知した。対応プラットフォームはPC(Steam)。なお本情報は、情報番組「INDIE Live Expo 2025.4.13」にあわせて公開されたものだ。

『Rise of Rebellion~地罰上らば竜の降る~』は、強敵との対峙や緊張感を追求したという3DアクションRPGである。本作の舞台は、かつて空を目指した竜たちが地罰によって絶滅した世界。人々は神の宿った大地を信仰しており、大地に溢れたエネルギー「メイ」を使いこなす戦士たちはメイナスと呼ばれていた。主人公は、メイナスの一人だ。本作で主人公は、侵略された故郷を取り戻すため、侵略者たちと戦いを繰り広げていく。

戦闘においては、スタミナや方向入力をともなう防御アクションなどが重要となる。本作の戦闘は、剣による近接戦闘がメインとなっている。斬撃で上手くダメージを与えつつ、防御や回避で敵の攻撃をしのいで戦うわけだ。ただし本作では、ボタンを押しているだけで敵の攻撃を防御できる代わりに、攻撃を防御するとスタミナを消耗。防御すると大きくスタミナを消費する重撃や、ガードできない攻撃なども存在している。さらに、スタミナ切れの状態でアーツに被弾したキャラクターは、地罰の発生により大ダメージを受けてしまう。

そこで本作では、敵の攻撃を直前に防ぐパリィや、重撃の方向にあわせて発動させるジャストパリィ、ジャスト回避などを使用。スタミナを減らさずに上手く立ち回り、逆に相手のスタミナやHPを削ることで、強敵を追い詰めていくのだ。強敵との対峙や、手に汗握る「リンク感」などが待ち受けているそうだ。

本作は、Hytacka氏によるTeam 疾鷹が手がけている。同氏は、「世界一面白いアクションRPG」の制作を人生のメインクエストとして掲げる国内のゲーム開発者。経歴としては、以前フロム・ソフトウェアに所属し、『DARK SOULS III』のDLC開発に参加していたそうだ。2020年ごろから、本作と関連した『地罰上らば竜の降る』の開発をスタート。同作は「講談社ゲームクリエイターズラボ」の第1期ラボメンバーに選出され、支援されながら制作が進められてきた。

しかし2023年3月に公開された戦闘体験版では、大きな注目を集めると共に、操作が難しすぎるといった声も集まってしまう。同氏はフィードバックを受けて、ゲームシステムの大幅な見直しなどを実施。一から作り直しをおこない、本作『Rise of Rebellion~地罰上らば竜の降る~』が制作されてきた。

今回の発表では、そんな『Rise of Rebellion~地罰上らば竜の降る~』が決定したわけだ。なおHytacka氏の動画によると、2月に公開された体験版のフィードバックを受けて、製品版では改善が実施。フリーカメラや画面酔いに関連したオプションの導入、環境にあわせた足音の変化、新スキル追加、ジャストパリィ成功時の演出追加、ジャストパリィの成功猶予増加やチュートリアル追加といった調整によって、遊びやすくパワーアップした内容になっているようだ。改善点については、製品版にあわせて体験版にも反映予定とされている。

『Rise of Rebellion~地罰上らば竜の降る~』はPC(Steam)向けに、4月22日発売予定だ。



Source link

Views: 0

宮城 岩沼 海岸で35歳女性が死亡 殺人事件か 警察が捜査



宮城 岩沼 海岸で35歳女性が死亡 殺人事件か 警察が捜査

13日、宮城県岩沼市の海岸で35歳の女性が死亡しているのが見つかり、警察は傷の状態などから殺人事件の可能性があるとみて捜査しています。



Source link

Views: 0

「ボボボーボ・ボーボボ」ふわふわヘアバンドや「ぬ」の巾着、サンキューマートコラボ



「ボボボーボ・ボーボボ」ふわふわヘアバンドや「ぬ」の巾着、サンキューマートコラボ

澤井啓夫原作によるアニメ「ボボボーボ・ボーボボ」のコラボレーション雑貨が、全国のサンキューマート店舗で5月上旬より順次販売される。



Source link

Views: 0

「やっぱり音楽って最高」.ENDRECHERI.が奔放に音の交歓を味わう「REBORN」ツアー開幕



「やっぱり音楽って最高」.ENDRECHERI.が奔放に音の交歓を味わう「REBORN」ツアー開幕

堂本剛のクリエイティブプロジェクト.ENDRECHERI.のライブツアー「REBORN」が、昨日4月12日に神奈川・横浜BUNTAIで初日を迎えた。



Source link

Views: 0

スリックシューターエコーポイントノヴァは、運命を震えるようになる新しいショットガンを紹介します



最高のビデオゲームショットガンは何ですか?私は常にGears of War GnasherとMW2 Model 1887 Akimboに偏っていましたが、残りよりも背が高くなる武器が1つあります:Doom’s Super Shotgun。ダブルバレルデスマシンは比類のないものです。それは、多くのショットガンが夢見ることができる方法で、騒々しく、強力で、本当に容赦ないものです。さて、私のお気に入りのモダンなFPS体験の1つは、Doomの本から葉を取り出し、Bootに匹敵するブームスティックを紹介しました。これはです エコーポイント ノバ、そして今も販売されています。
ストーリーの残りの部分を読んでください…
関連リンク:
動きFPSエコーポイントNovaは無料のアップデートが新しい武器を追加するので、guelikeになります
タイタンフォールは、ペースの速いFPSエコーポイントノヴァで再び住んでいます。
トニーホークのプロスケーターに触発された協同組合FPSデモ


Source link

Views: 0