Skip to content

Latest commit

 

History

History
100 lines (70 loc) · 2.57 KB

3.validation-sanitization.md

File metadata and controls

100 lines (70 loc) · 2.57 KB
title
Staðfesting á gögnum

Staðfesting á gögnum

Vefforritun

Ólafur Sverrir Kjartansson, [email protected]


Unnið með gögn

  • Þegar við tökum við gögnum úr formi er það yfirleitt frekar mikil handavinna
  • Verðum að staðfesta að gögn séu gild á bakenda
  • Ég endurtek: við verðum að staðfesta gögn á bakenda

Validation

  • Ekki nóg að nota <input required> eða önnur „validation“ attribute
  • Ekki heldur nóg að nota JavaScript „validation“ á framenda
    • Hægt að breyta t.d með DevTools eða senda með cURL
  • Treystum engu sem kemur frá öðrum

  • Getum og ættum að nýta okkur treyst forritasöfn til að staðfesta (validate) gögn
  • validator er library sem sér um að staðfesta og hreinsa strengi
  • express-validator gerir validator aðgengilegt gegnum middleware

import { body } from 'express-validator';

app.post(
  '/data',
  body('email').isLength({ min: 1 }).withMessage('Netfang skilyrt'),
  body('email').isEmail().withMessage('Netfang ekki rétt'),
  process()
);

function process(req, res) {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    // Það eru villur í gögnum!
    return invalid();
  }

  // Gögn eru OK
}

Sanitization

  • Túlkum öll gögn sem „óhrein“ (dirty) þar til hreinsuð (sanitized)
  • Hreinsun á gögnum frá notanda þ.a. þau innihaldi ekkert sem við viljum ekki
  • Getur verið öryggistengt (xss) eða fyrir gagnageymslu (fjarlægja bil, staðla gögn á einhvern máta)

Gögn geta verið lögleg skv. validation en samt verið „óhrein“, t.d.

  • <em>óli</em> er löglegt nafn ef við gerum aðeins kröfu um að nafn sé ekki-tómt
  • Ef við birtum nafn og hreinsum ekki HTMLið í burtu mun birting verða öðruvísi en við (sem forritarar) gerðum ráð fyrir
  • Þetta er dæmi um HTML injection sem getur leitt til XSS holu á vefnum okkar


app.post(
  '/post',
  sanitize('name').trim().escape(),
  sanitize('email').normalizeEmail(),
  sanitize('ssn').blacklist('-'),
  (req, res) => {
    process(req, res);
  }
);