title |
---|
Staðfesting á gögnum |
Ólafur Sverrir Kjartansson, [email protected]
- Þ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
- 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 strengiexpress-validator
gerirvalidator
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
}
- 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
validator
hefur sanitazion föll- Ekki
xss
hreinsun samt, notum annan pakka í það, sjáum þegar við skoðum öryggismál nánar
- Ekki
app.post(
'/post',
sanitize('name').trim().escape(),
sanitize('email').normalizeEmail(),
sanitize('ssn').blacklist('-'),
(req, res) => {
process(req, res);
}
);