Node-RED의 SQL 주입 방지

개요



Node-RED를 간단한 REST API 서버로 사용하는 문제가 있으며,
DB 서버 (MySQL)에 로그를 저장하는 장치가되어 있지만,
SQL 인젝션 대책은 어떻게 할까라고 생각해, 조사해 본 이야기.

결과



node-red-contrib-sqlstring이라는 노드가 있고, 이것을 사용할 수 있을 것 같다.
단지, Example이 부족하고 있어, 조금 사용법이 알고 괴로웠다···.

사용법


  • node-red-contrib-sqlstring 추가.
    햄버거 메뉴에서 팔레트 관리 선택

    노드 추가 탭을 선택하고 검색 문자에 "sqlstring"을 넣으면 node-red-contrib-sqlstring이 표시되므로 "노드 추가"를 클릭하십시오.

    추가가 완료되면 팔레트에 node-red-contrib-sqlstring의 노드가 추가됩니다 (왜 스토리지 항목 ...).
  • 흐름 만들기
    흐름은 자꾸 이런 느낌으로 해봅니다.
  • node-red-contrib-sqlstring 설정
    노드를 두 번 클릭하여 설정을 구성합니다.
    SQL 구문을 그대로 쓸 수 있는 것이 기쁘다! (이 노드를 알 때까지 Function 노드에서 어쩌면 썼습니다 ...)
    변수는 구문 안에 "?"를 쓰고 Variables 열에 해당하는 변수를 쉼표로 구분하여 설명합니다.

  • 여기서 빠진 것이 변수를 지정하는 방법.
    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 인젝션 대책은
    htps : // 기주 b. 코 m / mysqljs / sqlst 인 g 을 이용하고 있다는 것.

    좋은 웹페이지 즐겨찾기