From 560f53928a534435cc632d524c3e9745d9ea8ac3 Mon Sep 17 00:00:00 2001 From: yikth Date: Thu, 10 Sep 2020 08:59:32 +0800 Subject: [PATCH] security --- README.md | 5 +- .../homework1/backend_database_homework1.docx | Bin 240607 -> 280359 bytes files/homework1/nusbank.png | Bin 0 -> 38712 bytes security-api.md | 256 ++++++++++++++++++ 4 files changed, 259 insertions(+), 2 deletions(-) create mode 100644 files/homework1/nusbank.png create mode 100644 security-api.md diff --git a/README.md b/README.md index 6c25ee7..66affb3 100644 --- a/README.md +++ b/README.md @@ -384,5 +384,6 @@ MySQL localhost:3306 ssl SQL> select * from store_test; C:\> "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump.exe" -u root -p nusbank > d:/nusbank.sql ``` - -[Next](./server-side.md) \ No newline at end of file +## Others +* [Server Side](./server-side.md) +* [Security & API](./security-api.md) \ No newline at end of file diff --git a/files/homework1/backend_database_homework1.docx b/files/homework1/backend_database_homework1.docx index 9546f1047157a68c9e0981d847822e8d461242ec..7e432447f6c8d840d3617430c4179f221f8f7170 100644 GIT binary patch delta 54691 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 diff --git a/files/homework1/nusbank.png b/files/homework1/nusbank.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9b1720217aa6351920e746e60dfc2e999ed254 GIT binary patch literal 38712 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 literal 0 HcmV?d00001 diff --git a/security-api.md b/security-api.md new file mode 100644 index 0000000..0a97d98 --- /dev/null +++ b/security-api.md @@ -0,0 +1,256 @@ +# Security and API + +* Defense on depth +* Best Practices for web servers + + switch off unnecessary funtionality + + limit secure remote access + + use accounts with limited privileges + + segregate development, testing and live environment + + segregate data + + secrity patches + + monitor and audit servers and logs + + use security tools +* Top 10 Application security risks + + Injection - + + Broken authentication - compromised passwords + + sensitive data exposure + + xxe + + broken acess control + + security misconfiguration + +[Equifax case study](https://www.csoonline.com/article/3444488/equifax-data-breach-faq-what-happened-who-was-affected-what-was-the-impact.html) +* security patches +* broken authentication +* broken access control +* security misconfiguration +* single point of failure +* lack of management commitment + +## Security od Data in motion +* HTTPS / FTPS +* Type of SSL Certificates + + Signed by a Cerficate Authority (CA) + + Self-signed certificates (less trusted. For testing) + + + self sigend + ``` + $ openssl genrsa -out key.pem + $ openssl req -new -key key.pem -out csr.pem + $ openssl x509 -req -days 9999 -in csr.pem -signkey key.pem -out cert.pem + $ rm csr.pem + ``` + + ```Javascript + + ``` +* role based access control + + ## Security date at rest + * encrypt + + sensitive files + + storage drive + + password +* security of username and password + +## Regulation and Standards +* [international](https://www.pcisecuritystandards.org/) +* [Singapore](https://www.mas.gov.sg/regulation/guidelines/technology-risk-management-guidelines) +* [Personal Data Protection Act](https://www.pdpc.gov.sg/Overview-of-PDPA/The-Legislation/Personal-Data-Protection-Act) +* [FintTech Service](https://singaporefintech.org/sfa-launches-digital-self-assessment-framework-to-fast-track-fintech-firms-partnerships-with-financial-institutions/) + +## API Security +* Basic Authentication +* API key +* Bearer token +* JSON Web Token (JWT) + +## SQL Injection attack + +* sending body `{ id = "5 or 1=1" }`, will return all records. Thus, data leak +* need strong validation of inputs + +```javascript +// GET route for /user/id query +// with body = { "id": 2 } +app.get("/user/id", (request, response) => { + console.log(request.body); + // !!! validation example !!! + if (request.body.id === null + || Number.isNaN(request.body.id) + || !Number.isInteger(request.body.id)) { + response.send("Some id error occur"); + return; + } + // + connection.query(`SELECT * FROM users WHERE user_id = ${request.body.id}`, + (err, result) => { + if (err) { + response.send("Some id error occur"); + } + else { + response.send(result); + } + }); +}); + +``` + +## Code organisation & management +* folder tree + + \server.js + + \database.js + + \routes => store all routes + + \routes\customer.js + + \routes\seller.js + +* modularise into individual module file + + server.js : setup server listen and route linkage + ```javascript + const express = require("express"); + const bodyParser = require("body-parser"); + + const CustomerRouter = require("./routes/customer"); + const SellerRouter = require("./routes/seller"); + + let app = express(); //uri mapper + app.use(bodyParser.json()); + + app.use("/customer", CustomerRouter); + app.use("/seller", SellerRouter); + + app.listen(3000); + ``` + + database.js : database connection + ```javascript + const mysql = require("mysql"); + + let params = { + host: "localhost", + user: "root", + password: "root", + database: "sales", + }; + + mysqlConnection = mysql.createConnection(params); + + mysqlConnection.connect((err) => { + if (err) { + console.log("Failed to Connect"); + } else { + console.log("Connection successful"); + } + }); + + module.exports = mysqlConnection; + ``` + + customer.js : customer apis + ```javascript + const express = require("express"); + const connection = require("../database"); // import database connection + + CustomerRouter = express.Router(); + + // localhost:3000/customer/ + CustomerRouter.get("/", (req, res) => { + connection.query("select * from customer", (err, rows) => { + if (err) { + console.log(err); + res.send("Some error occurred"); + } else { + res.send(rows); + } + }); + }); + + // localhost:3000/customer/name/Zixuan + CustomerRouter.get("/name/:value", (req, res) => { + connection.query( + `select * from customer where customer_name = '${req.params.value}'`, + (err, rows) => { + if (err) { + console.log(err); + res.send("Some error occurred"); + } else { + res.send(rows); + } + } + ); + }); + + // localhost:3000/customer/id/10 + CustomerRouter.delete("/id/:value", (req, res) => { + connection.query( + `delete from customer where customer_id = ${req.params.value}`, + (err, rows) => { + if (err) { + console.log(err); + res.send("Some error occurred"); + } else { + res.send("Deleted Successfully"); + } + } + ); + }); + + module.exports = CustomerRouter; + ``` + + seller.js : seller apis + ```javascript + const express = require("express"); + const connection = require("../database"); + + SellerRouter = express.Router(); + + // localhost:3000/seller/ + SellerRouter.post("/", (req, res) => { + connection.query( + `insert into seller (seller_name, seller_wallet) values ('${req.body. name}',${req.body.wallet})`, + (err, rows) => { + if (err) { + console.log(err); + res.send("Some error occurred."); + } else { + res.send("Saved Successfully."); + } + } + ); + }); + + module.exports = SellerRouter; + ``` +* sample client fetch +```javascript +const fetch = require("node-fetch"); + +fetch("http://localhost:3000/customer/name/Zixuan", { + method: "get", + // body: JSON.stringify( + // (body = { + // name: "dixant", + // email: "mittal", + // }) + // ), + headers: { "Content-Type": "application/json" }, +}) + .then((res) => res.json()) + .then((json) => console.log(json)); +``` + +* API key + +```javascript + +connection.query( + `SELECT * FROM client WHERE client_id = ${request.body.client_id} AND client_key = '${request.body.client_key}'`, + (err, result) => { + if (ok) + serve the request... + ... + } +) +``` + +* Backend server + + formatting conflicting + + flexibility with separation + + separation on client-ui and backend \ No newline at end of file