[英]How to secure a web app with login and database in 2022?
我的安全知识很老了,我想刷新我的全栈开发工具。 我正在学习 Oauth2、JWT、Next.JS、Auth0 等等,但我不知道如何将所有这些结合在一起。 请耐心等待我,我在这个问题上付出了努力:)
假设我想构建一个 web 应用程序,用户可以在其中注册到建筑物。 他正在输入他的个人数据并收到一个人性化的登记号码(例如 A00001 - Z99999)。
o/ ___
/▌ |App| --POST---> API --> Add User to MySQL, create number-|
/\ ——— <---------------------Send number back--------------|
/user
POST 路径,以避免被黑客发送垃圾邮件?现在大楼门口有一名保安人员,使用管理应用程序。 他得到所有用户,并在用户进入建筑物时单击“确定”。
O/ _________ ---PUT---> API --> Modify User
/▌ |Admin App| ---GET---> API --> All Users -|
/\ ————————— <-------send all users--------|
/user
GET 路径,以便只有经过身份验证的管理员才能获取所有用户?/user
PUT 路径,以便只有经过身份验证的管理员才能更新用户? 管理员无需注册。 只有一位管理员使用用户名和密码登录。 用户不需要 GET /user/[id]
。 但是,当我向他们发送带有 32 位 hash 的链接然后我打开 GET /user/[hash]
时,它是否安全?
对于那些希望如何帮助我编写代码的人,我会提出一些问题:
// pages/checkin.js
export default function Checkin() {
const checkin = async (e) => {
e.preventDefault();
try {
await fetch('https://myapi.com/user', {method: "POST", data});
} catch (err) {
console.log(err);
}
}
return (
<div>
<form onSubmit={checkin}>
{/* ... */}
</form>
</div>
)
}
// pages/_app.js
import { UserProvider } from "@auth0/nextjs-auth0";
function MyApp({ Component, pageProps }) {
return (
<UserProvider>
<Component {...pageProps} />
</UserProvider>
);
}
export default MyApp;
// pages/api/auth/[...auth0].js
import { handleAuth } from '@auth0/nextjs-auth0';
export default handleAuth();
// pages/userList.js
import { useUser } from '@auth0/nextjs-auth0';
export default function UserList() {
const { user, error, isLoading } = useUser();
if (isLoading) return <div>Loading...</div>;
if (error) return <div>{error.message}</div>;
{/*
* How and where do I fetch the secured users?
*/}
const ok = async (id) => {
try {
/*
* How to secure the PUT?
*/
await fetch('https://myapi.com', {method: 'PUT', data: {id, ok: true}})
} catch (err) {
console.log(err);
}
}
return (
user && (
<div>
{users.map((user) => (
<div key={user.id}>
{user.human_numer} - <button onClick={() => ok(user.id)}>OK</button>
</div>
))}
</div>
)
);
}
所以,我的一些安全提示(请注意,我不是安全专家,只是对 web 应用程序进行了很多编码):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.