ブックマーク / qiita.com (422)

  • ブラウザ開発者ツールのネットワークタブに表示されない情報送信手法 - Qiita

    はじめに はじめまして、セキュリティエンジニアのSatoki (@satoki00) です。今回はブラウザの開発者ツールのネットワークタブから隠れて、Webサイト内の情報を送信する手法をまとめます。所謂Exfiltrationというやつです。中にはCSPの制限をBypassするために用いられるテクニックもあります。CTFなどで安全に使ってください。 前提 発端はWeb上でテキストの文字数をカウントできるサイトが閉鎖する際の話です。カウント対象のテキストデータがサイト運営 (やサイトを改竄した攻撃者) に盗み取られていないかという議論が巻き起こっていました。「盗み取られていない」側の主張は、ブラウザの開発者ツールのネットワークタブにリクエストを送信した形跡がないというものでした。ここで ブラウザの開発者ツールのネットワークタブに表示がなければ外部へデータを送信していないのか? といった疑問が

    ブラウザ開発者ツールのネットワークタブに表示されない情報送信手法 - Qiita
    bouzuya
    bouzuya 2024/07/16
  • 祖母が就寝するとDBインサートができなくなる - Qiita

    世の中には、一見関係なさそうな物理現象がITシステムに不可思議な影響を及ぼすことがあります 例えば,500マイル以上離れた場所にメールが送れないという話だったり 中国人のAさんがお茶を入れると会社のネットが繋がらなくなる という話があります。 私の場合は、祖母が就寝するとDBインサートが失敗する、という状況でした 実家の見守りシステム 問題が起きているのは、離れた実家にいる一人暮らしの祖母の状態を見守るために作成した自作のシステムです。 気温や湿度、CO2濃度、明るさ、部屋のドアの開閉、冷蔵庫の開閉の状況をモニタリングできるようにしています。 Raspberry Piに各種センサが接続され、定期的にInfluxDBに送信し、Grafanaという可視化ツールでいつでも見られるようにしています。 これらの情報を見ることで、祖母の家の部屋の温度が適切か、活動しているか、部屋にいるかなどが分かりま

    祖母が就寝するとDBインサートができなくなる - Qiita
    bouzuya
    bouzuya 2024/01/10
  • ハッカーのおもちゃとしてのNostrのススメ - Qiita

    はじめに Nostrという、SNSのようなものはご存知でしょうか? ご存知でなければ、ぜひまず一度触ってみることをお勧めします。 割と普通にSNSっぽく使えます。 分散系SNSっぽいシステム Nostrは、分散系のSNSっぽいネットワークです。 図で表すとこんな感じ。普通に想像するWebサービスとは随分形が違うと思います。 各所のリレーサーバーに、ユーザーは投稿をばらまき、ユーザーがそれを見る形です。 分散の責任がユーザー(クライアント)側にあって、リレーサーバーが落ちたり消えたりしても影響が起きにくい仕組みです。 より詳しい説明は上記でやってるのですが、端的に言って 中央管理者がいない(各リレーに管理者はいる) 冗長で災害に強い Websocketのリアルタイム通信 オープンでシンプルで、でも拡張し放題な仕様 数多のサーバーによる分散ネットワーク といった特徴があります。 ※P2P技術

    ハッカーのおもちゃとしてのNostrのススメ - Qiita
    bouzuya
    bouzuya 2024/01/04
  • erased_serdeで学ぶobject safeじゃないtraitをtrait objectで使う方法 - Qiita

    この記事はRust Advent Calendar 2021 カレンダー2の10日目の記事です。 trait objectとobject safety みなさんtrait objectを使っていますか? もちろんパフォーマンスのことなどを考えると、できるだけenum dispatchなどを使う方がいいのですが、利便性やapiの都合、パフォーマンスがいらない場合などではまあ便利だとおもいます。 あるtraitをtrait objectとして使う場合、traitがobject safetyという規則に従ったものでないといけません。この中に traitのメソッドがジェネリックなパラメータを持ってはいけない traitがSelf:Sizedを要求してはいけない というのがあります。 trait ObjectSafe1{ // object safe なメソッド fn safe_method_1(&

    erased_serdeで学ぶobject safeじゃないtraitをtrait objectで使う方法 - Qiita
    bouzuya
    bouzuya 2023/11/26
  • 非同期 Rust パターン - Qiita

    Rust で非同期並列処理を書く時に出てくるパターンについて解説します tokio 1.0 と futures 0.3 環境です async function 編 pic.twitter.com/ihHRXmSaFh — legokichi (@duxca) August 28, 2021 async fn hoge() -> () まずは基 async fn hoge() -> () { tokio::time::sleep(std::time::Duration::from_millis(100)).await; }

    非同期 Rust パターン - Qiita
    bouzuya
    bouzuya 2023/11/07
  • 【Rust】serdeでPhantomDataを扱う - Qiita

    serdeにおいてPhantomData型はデフォルトでは空の値として扱われ,例えば以下のVideo型を use serde::{Deserialize, Serialize}; use std::marker::PhantomData; #[derive(Debug, Serialize, Deserialize, PartialEq)] struct Video<T> { file_type: PhantomData<T>, file_name: String, } impl<T> Video<T> { fn new(file_name: String) -> Video<T> { Video { file_name, file_type: PhantomData, } } } #[derive(Debug, PartialEq)] struct Mp4; #[derive(Debug

    【Rust】serdeでPhantomDataを扱う - Qiita
    bouzuya
    bouzuya 2023/03/08
  • PureScriptの型レベル計算でルービックキューブ(2×2×2)を解く - Qiita

    class ConsCube (mode :: Symbol) (c1 :: Symbol) (c2 :: Symbol) (c3 :: Symbol) (c4 :: Symbol) (c5 :: Symbol) (c6 :: Symbol) (c7 :: Symbol) (c8 :: Symbol) (c9 :: Symbol) (c10 :: Symbol) (c11 :: Symbol) (c12 :: Symbol) (c13 :: Symbol) (c14 :: Symbol) (c15 :: Symbol) (c16 :: Symbol) (c17 :: Symbol) (c18 :: Symbol) (c19 :: Symbol) (c20 :: Symbol) (c21 :: Symbol) (c22 :: Symbol) (c23 :: Symbol) (c24 :: S

    PureScriptの型レベル計算でルービックキューブ(2×2×2)を解く - Qiita
    bouzuya
    bouzuya 2023/01/25
  • [2023年1月版]競技プログラミングを始めたばかりの人にオススメの問題集 - Qiita

    競技プログラミングを始めたばかりの人にオススメの問題集は何?」というのが普段よく見ている Slack で話題に登っていたので、私の考えをまとめました。 おことわり 私は競技プログラミング格的に始めてからもうすぐ5年の水色コーダーです。めっちゃくちゃに強いわけではないですが、基礎的なところはある程度習得している、という感じです。 この記事は、そのような実力の私が、あくまでも独自の評価軸で勝手に評価したものなので異論はあると思います。また、各種学習法/問題集について私自身が全て完走しているわけではありません。 これらをご理解いただいたうえで、以下をご覧ください。 最推し: アルゴ式 2023年1月現在、初心者向けの最初の問題集としてお勧めしたいのは アルゴ式 です。アルゴ式の特徴として次のようなものがあると思っていて、それが初心者が練習するうえで適した特徴だと考えるからです ジャンルごと

    [2023年1月版]競技プログラミングを始めたばかりの人にオススメの問題集 - Qiita
    bouzuya
    bouzuya 2023/01/07
    ぼくは『競技プログラミングの鉄則』を読んで問題を一通り解いた。それだけ読んでも分からないかもだけど AtCoder のコンテストに何年も参加した後で読むと「これ、攻略本だ……」ってなる。 https://blog.bouzuya.net/2022/12/30/
  • grepでの検索結果の前後行を後付け表示できるコマンドを作った - Qiita

    この記事はRust Advent Calendar 2022の7日目の記事です。 Rustの勉強がてら、grepの検索結果の続きを表示するコマンドを作ってみました。 経緯 表題の通り、grepの検索結果の続きが表示したくなったからです。 例えば、ログファイルの調査をする場合です。 一連のトランザクションのログとして、beginで始まり、endで終了するログファイルが存在するとします。 2022/01/01T01:00:00 a12b1cfefa2a37a89fe73 begin 2022/01/01T01:00:01 a12b1cfefa2a37a89fe73 foobar1 2022/01/01T01:00:01 a12b1cfefa2a37a89fe73 foobar2 2022/01/01T01:00:02 a12b1cfefa2a37a89fe73 foobar3 2022/01/

    grepでの検索結果の前後行を後付け表示できるコマンドを作った - Qiita
    bouzuya
    bouzuya 2022/12/31
  • Rust で Fast API のように開発する! - Qiita

    PythonFastAPI のように、Rust でもWebサーバー側で OpenAPI を生成させたいと考えていました。 axum の Issue を覗いてみると、 aide というクレートが有望そうです。 (axum 自身は現状ロードマップに取り込むつもりがないようです) 下記が調査で得られた成果物です。Rust の型変更をするだけで、フロントのAPIクライアントがリアルタイムで定義変更を検知します。 (画像の解像度が悪いですが、左が TypeScript, 右が Rust のコードです) Rust 側のスキーマ変更を cargo watch で監視 aide で OpenAPI を自動生成 OpenAPI から TypeScript の型を自動生成 フロントの axios クライアントが API の定義変更を自動検知 実際に触ってみた感想をまとめました。 ドキュメントは少ない c

    Rust で Fast API のように開発する! - Qiita
    bouzuya
    bouzuya 2022/12/31
  • ライブラリ使ってTOTPジェネレータを実装してみる - Qiita

    はじめに Google AuthenticatorとVIP Accessに対応したジェネレータを作って見るだけの話でございます。 どうせならアドベントカレンダー埋めたいし、1日目が開いてたから書きました。 難易度については、純粋な技術的観点で比較するとGoogle AuthenticatorもVIPAccessに差はほぼないです。 とはいえ、色々問題があるので、Google Authenticatorだけ書きます。 問題ってなに? VIPAccessはそもそもTOTPシークレットが非公開(後述)な上、秘密鍵自体マスターキー(復号キー)で保護されています。 マスターキーが変更されると、TOTPシークレットが取り出せなくなる問題があります。 上記のプロビジョニング処理と認証処理以外は、似たような感じなのでコード自体は省略します。 一応、日語でVIPAccessのプロビジョニングからTOTPの

    ライブラリ使ってTOTPジェネレータを実装してみる - Qiita
    bouzuya
    bouzuya 2022/12/30
  • Tauri + windows-rsでオーディオスイッチャーを作った話またはMicrosoftのRustへの本気度をCOM対応から見る的な何か - Qiita

    Tauri + windows-rsでオーディオスイッチャーを作った話またはMicrosoftRustへの気度をCOM対応から見る的な何か この記事は Rust Advent Calendar 2022 - Qiita 20日目の記事です1! GUIフレームワークのTauriと、Microsoft公式が出しているWindows API用クレートのwindows-rsを使用し、audio-bookmarkというWindows用オーディオ切り替えアプリを作成したので、その仕組みの解説とwindows-rsの紹介記事になります! 作ったアプリ「audio-bookmark」のリポジトリ↓ ダウンロードページ: https://github.com/anotherhollow1125/audio-bookmark/releases Assets以下の audio-bookmark_0.0.0_

    Tauri + windows-rsでオーディオスイッチャーを作った話またはMicrosoftのRustへの本気度をCOM対応から見る的な何か - Qiita
    bouzuya
    bouzuya 2022/12/30
    windows-rs
  • Rustのconst関係の更新2022 - Qiita

    この記事はRust Advent Calendar 2022の18日目の記事です。 昨日は @MaaSaHero さんのRustAmazon商品URLの不要部分削除するCLI作ったでした。 去年に続き2022年のconst関係の更新をまとめました。 英語がそれほど得意ではないので抜け漏れ間違いがあれば指摘いただけると助かります。 内容はリリースノートを参考にしており確認しているバージョンは 1.58.0 (2022-01-13)から1.66.0 (2022-12-15)までです。 Language 1.58.0 *const T pointers can now be dereferenced in const contexts. 定数文脈で*const Tを逆参照できるようになった。 ただし*mut Tのようなミュータブルな参照は逆参照できない。 1.59.0 Stabilize de

    Rustのconst関係の更新2022 - Qiita
    bouzuya
    bouzuya 2022/12/30
  • Rustのunstable featuresについて - Qiita

    記事はRust Advent Calendar 2022の13日目の記事です。 記事では、標準的なRustの教材ではあまり触れられない、RustのUnstable(experimental)機能について解説していきます。 まず、unstable機能というものの存在意義から説明します。なんとなく知っている人は飛ばして構いません。 Rustは"Empowering everyone to build reliable and efficient software."というキャッチコピーから分かる通り、堅牢さを売りの一つとしており、強い後方互換性と安定性を保証します。しかしこのスタンスは開発の遅滞化を招きかねないというデメリットもあります。 そこで、Rustはコンパイラについてnightly/beta/stableの3バージョンを公開しています。nightlyバージョンはほぼ最も不安定で、最

    Rustのunstable featuresについて - Qiita
    bouzuya
    bouzuya 2022/12/29
  • ニッチなRustのNicheについて - Qiita

    u8 no: 1 opt: 2 opt2:2 core::num::nonzero::NonZeroU8 no: 1 opt: 1 opt2:2 alloc::string::String no: 24 opt: 24 opt2:32 Optionが増えているのにsizeが変わっていないことがある! これはRustのniche optimizationが働いているからである。 niche nicheとはもともと「隙間」という意味がある。 Rustはその「隙間」を検知してその間に情報を埋めることができる。 例えばNonZeroU8という型がある。 その名の通り、「ゼロにならないu8」な型である。 ゼロにならないのは(unsafeを使わない限り)保証されているので、この型には0という隙間がある。 つまりNoneという情報をその0に埋めてしまえばいいということだ。 メモリ上の表現として 0ならN

    ニッチなRustのNicheについて - Qiita
    bouzuya
    bouzuya 2022/12/28
    NonZeroU8
  • あの曲なんだっけ?をサムネの色から調べる - Qiita

    この記事は Rust Advent Calendar 2022 7日目の記事です。 みなさんは、「ある曲が聴きたいけど、曲名もアーティスト名も思い出せない!」みたいなことありませんか? というか、あるとします。 曲名もアーティスト名もそもそも覚えられないよ!!!! こういうときに私が普段これをどうしているかというと、 曲の雰囲気はわかるので、そういう曲を作っていそうなアーティストの曲を適当に漁る サムネの見た目を何となく覚えているので、自分のライブラリを目視でどうにか探す 諦める などがあります。 今回は、この中の 「サムネ見た目を何となく覚えているので、自分のライブラリを目視でどうにか探す」 をもうちょい楽にしてみようと思います。 ということで、 find-track-by-color というツールを Rust で実装しました。 前提として rustc が 1.65.0 以降であること

    あの曲なんだっけ?をサムネの色から調べる - Qiita
    bouzuya
    bouzuya 2022/12/28
  • YJITで使ったRustの省メモリ化テクニック - Qiita

    これは Rust Advent Calendar 2022 のカレンダー2の22日目の記事です。 YJITとは 私は今年の7月からShopifyという会社でRubyのJITコンパイラであるYJITを開発している。このJITは今年CからRustに書き直されたため、現職では業務としてフルタイムでRustを書いている。 実用段階になったYJIT おそらく世界最大規模でRubyを使っている弊社では、お客様のお店のサイトをレンダリングするアプリには社内最大のトラフィックが来ていて、実は最近そのアプリほぼ全台で最新のYJITが有効化されたことが昨日公開情報になった。あまりにも大量のトラフィックが来るので、YJITによって行なわれているRubyコード実行量はYJITが使われてないものよりも世界全体で見て多くなったのではないかとCEOが言っていた。 この規模のトラフィックを捌くためにこのアプリは比較的よく

    YJITで使ったRustの省メモリ化テクニック - Qiita
    bouzuya
    bouzuya 2022/12/23
  • 要注意!?本当に怖いCloudFront - Qiita

    はじめに 先日、海外向けに運用していた個人ブログがDDoS攻撃を受けてしまいました。 こういったサイバー攻撃は、企業に対して行われるものという先入観がありました。 しかし、調べてみると、最近では個人ブログも標的になってきていると報告があがっていました。 CloudFrontとS3で作成する静的サイトが人気になっており、特にCloudFrontの危険性について紹介したいと思います。 DDoS攻撃って? ざっくり説明すると、ウェブサイトやサーバーに対して過剰なアクセスやデータを送付するサイバー攻撃です。 インフラストラクチャーレイヤー攻撃(レイヤー3、4)とアプリケーションレイヤー攻撃(レイヤー6、7)の2つに分類されます。 ご指摘を頂きましたので、訂正いたします。 厳密には、EDoS攻撃でした。 AWS Shield Standard AWSを利用した場合、defaultでAWS Shiel

    要注意!?本当に怖いCloudFront - Qiita
    bouzuya
    bouzuya 2022/11/08
    EDoS
  • Deno のめっちゃ難しいバグを修正した - Qiita

    2022年4月、Deno に以下のバグが報告されました。 fetch API を使って 300KB ぐらいあるファイルをアップロードすると、一定確率でアップロードされたファイルが壊れるというバグの報告です。 報告者によれば、1.20.6 まではバグは発生しておらず、1.21.0 から発生するようになったという事です。1.20.6 の次のリリースが 1.21.0 なので、パッチバージョン1個分まで、バグの発生時期が特定されている状態です。 fetch 周りは自分はほぼ実装していないので「担当範囲ではない」感覚だったので、普通にスルーしていました。 自分に限らず、Deno Land コアチームの誰もこの issue にピンと来る人が居なかったようで、stale ボット (数ヶ月進捗の無い issue を自動的にクローズしようとするボット) に2回もクローズされかけていました。Deno の st

    Deno のめっちゃ難しいバグを修正した - Qiita
    bouzuya
    bouzuya 2022/10/05
  • Rustのコネクションプールはテスト間で共有できないという話 - Qiita

    この記事ではRustDB接続テストを書くときにハマった話について書きます。 Running Example 例として以下のような関数のテストを行うことを考えましょう。 use sqlx::{Poxtgres, Row, Executor}; use chrono::{DateTime, Utc}; pub async fn select_now<'c, E>(executor: E) -> DateTime<Utc> where E: Executor<'c, Database = Postgres>, { let row = sqlx::query("SELECT NOW()") .fetch_one(executor) .await .unwrap(); let now: DateTime<Utc> = row.try_get("now").unwrap(); now } use s

    Rustのコネクションプールはテスト間で共有できないという話 - Qiita
    bouzuya
    bouzuya 2022/09/27