0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Node-REDでのSQLインジェクション対策

Posted at

概要

Node-REDを簡易REST APIサーバーとして使う案件があって、
DBサーバー(MySQL)にログを保存する仕掛けになっているんだけど、
SQLインジェクション対策ってどうやるんだっけと思って、調べてみた話。

結果

node-red-contrib-sqlstringというノードがあって、これが使えそう。
ただ、Exampleが不足していて、ちょっと使い方がわかり辛かった・・・。

使い方

  1. node-red-contrib-sqlstringを追加。
    ハンバーガーメニューから、パレットの管理を選択
    image.png
    ノードを追加タブを選び、検索文字に「sqlstring」を入れると、node-red-contrib-sqlstringが表示されるので、「ノードを追加」をクリック
    image.png
    追加が完了すると、パレットにnode-red-contrib-sqlstringのノードが追加されています(なぜかストレージの項目・・・)。
    image.png

  2. フローを作成
    フローはざっくりこんな感じにしてみます。
    image.png

  3. node-red-contrib-sqlstringの設定
    ノードをダブルクリックして、設定を行います。
    SQL構文をそのまま書けるのが嬉しい!(このノードを知るまで、Functionノードでごにょごにょ書いてた・・・)
    変数は構文の中に「?」を書いておき、Variables欄に該当する変数をカンマ区切りで記載します。
    image.png

ここでハマったのが、変数の指定の仕方。
http inノードで受けたデータは、msg.payloadの中に入ってくるんですが、
例えばブラウザで「localhost:1880/test/api/hoge?id=1」と指定すると
msg.payload.idに1が設定されて次のノードにわたってきます。

ここで、Variables欄に「msg.payload.id」と指定しても、上手く値が入ってこない・・・。
試しに「id」としても、上手く値が入ってこない・・・。
node-red-contrib-sqlstringのソース見たら、
どうやらこの場合は「payload.id」と指定する必要があるようです。
⇒ Node-REDではこの指定の方法が普通なのかな?

ちなみに、このノード、SQLインジェクション対策は
https://github.com/mysqljs/sqlstringを利用しているとのこと。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?