马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
明白话谈谈你对前端安全的理解,常见的前端安全问题有哪些及如何防范?
前端安全主要是指保护用户在使用前端应用(比如网页、移动端应用的前端界面等)时,其数据、隐私和操纵不会受到恶意攻击和破坏。前端是用户与应用交互的最直接部分,一旦存在安全漏洞,大概导致用户信息泄露、数据被篡改、应用被恶意使用等问题。以是确保前端安全对于用户体验和应用的可信度都至关紧张。
常见的前端安全问题及防范方法
1. 跨站脚本攻击(XSS)
XSS 攻击是指攻击者往 Web 页面里插入恶意脚本,当用户浏览该页面时,脚本就会执行,从而达到攻击目的,比如窃取用户的 cookie 等信息。
反射型 XSS
攻击者构造带有恶意脚本的 URL,当用户点击这个 URL 时,恶意脚本会在服务器响应中被反射返来并在用户浏览器中执行。
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>反射型 XSS 示例</title>
- </head>
- <body>
- <!-- 这里模拟从 URL 参数中获取数据并显示,存在安全隐患 -->
- <div id="output"></div>
- <script>
- // 获取 URL 中的参数
- const urlParams = new URLSearchParams(window.location.search);
- const paramValue = urlParams.get('data');
- // 直接将获取到的参数插入到页面中,未做任何处理,易受 XSS 攻击
- document.getElementById('output').innerHTML = paramValue;
- </script>
- </body>
- </html>
复制代码 防范方法:对用户输入进行转义处理,将特别字符转换为 HTML 实体。
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>反射型 XSS 防范示例</title>
- </head>
- <body>
- <div id="output"></div>
- <script>
- const urlParams = new URLSearchParams(window.location.search);
- const paramValue = urlParams.get('data');
- // 定义一个函数来对输入进行转义
- function escapeHtml(text) {
- const map = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- "'": '''
- };
- return text.replace(/[&<>"']/g, function(m) {
- return map[m];
- });
- }
- // 对获取到的参数进行转义后再插入到页面中
- document.getElementById('output').innerHTML = escapeHtml(paramValue);
- </script>
- </body>
- </html>
复制代码 存储型 XSS
攻击者将恶意脚本存储在服务器端(比如数据库),当其他用户访问包罗恶意脚本的页面时,脚本就会执行。
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>存储型 XSS 示例(模拟接收服务器数据)</title>
- </head>
- <body>
- <!-- 模拟从服务器获取数据并显示 -->
- <div id="message"></div>
- <script>
- // 假设这里是从服务器获取到的数据(实际中是通过 AJAX 等方式获取)
- const serverData = "<script>alert('我是恶意脚本')</script>";
- document.getElementById('message').innerHTML = serverData;
- </script>
- </body>
- </html>
复制代码 防范方法:在服务器端对用户输入进行严酷的过滤和转义,在输出到前端时也要进行安全处理。
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>存储型 XSS 防范示例</title>
- </head>
- <body>
- <div id="message"></div>
- <script>
- const serverData = "<script>alert('我是恶意脚本')</script>";
- // 对从服务器获取的数据进行转义
- const escapedData = serverData.replace(/<script.*?<\/script>/gi, '');
- document.getElementById('message').innerHTML = escapedData;
- </script>
- </body>
- </html>
复制代码 2. 跨站哀求伪造(CSRF)
CSRF 攻击是指攻击者诱导用户进入一个恶意网站,然后使用用户在当前网站已经获取的登录凭证,在用户不知情的情况下以用户的名义发起恶意哀求。
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>CSRF 示例</title>
- </head>
- <body>
- <!-- 假设用户已经登录了某个网站,这里模拟恶意网站 -->
- <img src="https://example.com/api/transfer?to=attacker&amount=1000" style="display: none;">
- <!-- 当用户访问这个页面时,会自动发起一个转账请求(假设 api 没有防范措施) -->
- </body>
- </html>
复制代码 防范方法:在哀求中添加 CSRF 令牌,服务器验证令牌的有效性。
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>CSRF 防范示例</title>
- </head>
- <body>
- <form action="https://example.com/api/transfer" method="post">
- <!-- 从服务器获取 CSRF 令牌并隐藏在表单中 -->
- <input type="hidden" name="csrf_token" value="1234567890">
- <input type="text" name="to" placeholder="收款人">
- <input type="number" name="amount" placeholder="金额">
- <input type="submit" value="转账">
- </form>
- <script>
- // 可以在发送请求前对 CSRF 令牌进行验证等操作(这里简单示例)
- const form = document.querySelector('form');
- form.addEventListener('submit', function(event) {
- const csrfToken = form.querySelector('input[name="csrf_token"]').value;
- if (!csrfToken) {
- event.preventDefault();
- alert('缺少 CSRF 令牌');
- }
- });
- </script>
- </body>
- </html>
复制代码 3. 点击劫持
点击劫持是指攻击者通过透明的 iframe 等方式,将恶意页面覆盖在正当页面上,诱使用户点击恶意页面上的元素,而用户以为点击的是正当页面。
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>点击劫持示例</title>
- </head>
- <body>
- <iframe src="https://example.com" style="opacity: 0; width: 100%; height: 100%; position: absolute;"></iframe>
- <!-- 这里透明的 iframe 覆盖在页面上,用户点击页面时可能实际点击到了 iframe 中的内容 -->
- <button>点击我</button>
- </body>
- </html>
复制代码 防范方法:使用 HTTP 头 X-Frame-Options 来防止页面被嵌入到 iframe 中。
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>点击劫持防范示例</title>
- <style>
- /* 额外的 CSS 防范措施,禁止页面被其他页面嵌入 */
- body {
- position: relative;
- z-index: 1;
- }
- </style>
- </head>
- <body>
- <button>点击我</button>
- </body>
- </html>
复制代码 详细介绍如何防范跨站脚本攻击(XSS)
跨站脚本攻击(XSS)是一种常见的网络安全漏洞,攻击者会在目标网站中注入恶意脚本,当用户访问该网站时,这些恶意脚本就会在用户的浏览器中执行,从而窃取用户信息、篡改页面内容等。以下是一些防范XSS攻击的方法及示例代码(以Python Flask框架为例):
下面我会把之前Python示例代码对应的防范 XSS 攻击的功能用 JavaScript 实现,这里假设使用 Node.js 环境以及 Express 框架。
1. 对用户输入进行严酷验证和过滤
下面的代码通过 replace 方法过滤用户输入中的 < 和 > 字符。
- const express = require('express');
- const app = express();
- // 处理根路径的 GET 请求
- app.get('/', (req, res) => {
- // 获取用户输入的参数,若没有则默认为空字符串
- const userInput = req.query.input || '';
- // 过滤用户输入中的 < 和 > 字符
- const filteredInput = userInput.replace(/</g, '<').replace(/>/g, '>');
- // 返回包含过滤后输入的 HTML 页面
- res.send(`<h1>你输入的内容是:${filteredInput}</h1>`);
- });
- // 启动服务器,监听 3000 端口
- const port = 3000;
- app.listen(port, () => {
- console.log(`服务器运行在端口 ${port}`);
- });
复制代码 2. 对输出进行编码
使用 he 库对用户输入进行编码,避免 XSS 攻击。
- const express = require('express');
- const he = require('he'); // 引入 he 库用于编码
- const app = express();
- // 处理根路径的 GET 请求
- app.get('/', (req, res) => {
- // 获取用户输入的参数,若没有则默认为空字符串
- const userInput = req.query.input || '';
- // 对用户输入进行编码
- const encodedInput = he.encode(userInput);
- // 返回包含编码后输入的 HTML 页面
- res.send(`<h1>你输入的内容是:${encodedInput}</h1>`);
- });
- // 启动服务器,监听 3000 端口
- const port = 3000;
- app.listen(port, () => {
- console.log(`服务器运行在端口 ${port}`);
- });
复制代码 3. 使用安全的 HTTP 头
设置 Content - Security - Policy 头来限定页面可以加载的资源来源。
- const express = require('express');
- const app = express();
- // 处理根路径的 GET 请求
- app.get('/', (req, res) => {
- // 获取用户输入的参数,若没有则默认为空字符串
- const userInput = req.query.input || '';
- // 设置 Content - Security - Policy 头
- res.setHeader('Content - Security - Policy', "default - src'self'");
- // 返回包含用户输入的 HTML 页面
- res.send(`<h1>你输入的内容是:${userInput}</h1>`);
- });
- // 启动服务器,监听 3000 端口
- const port = 3000;
- app.listen(port, () => {
- console.log(`服务器运行在端口 ${port}`);
- });
复制代码 以上代码示例分别展示了差别的防范 XSS 攻击的方法。必要注意的是,要运行使用 he 库的代码,你必要先使用 npm install he 命令进行安装。
可以运行的代码:
- const express = require('express');
- const he = require('he');
- const app = express();
- // 对用户输入进行严格验证和过滤
- app.get('/filter', (req, res) => {
- const userInput = req.query.input || '';
- const filteredInput = userInput.replace(/</g, '<').replace(/>/g, '>');
- res.send(`<h1>你输入的内容(过滤后)是:${filteredInput}</h1>`);
- });
- // 对输出进行编码
- app.get('/encode', (req, res) => {
- const userInput = req.query.input || '';
- const encodedInput = he.encode(userInput);
- res.send(`<h1>你输入的内容(编码后)是:${encodedInput}</h1>`);
- });
- // 使用安全的 HTTP 头
- app.get('/csp', (req, res) => {
- const userInput = req.query.input || '';
- res.setHeader('Content - Security - Policy', "default - src'self'");
- res.send(`<h1>你输入的内容是:${userInput}</h1>`);
- });
- const port = 3000;
- app.listen(port, () => {
- console.log(`服务器运行在端口 ${port}`);
- });
-
复制代码
- 避免内联脚本和内联样式
- 尽量不要在HTML标签中使用 onclick、onmouseover 等内联变乱处理程序,也不要使用内联样式,由于它们很轻易被攻击者使用来注入恶意脚本。
- <!-- 不好的示例,存在内联脚本 -->
- <button onclick="alert('你点击了按钮')">点击我</button>
- <!-- 好的示例,使用外部JavaScript文件来处理事件 -->
- <button id="myButton">点击我</button>
- <script src="script.js"></script>
复制代码 在 script.js 文件中可以如许写:
- document.getElementById('myButton').addEventListener('click', function() {
- alert('你点击了按钮');
- });
复制代码
- 定期更新和维护软件
- 及时更新网站所使用的框架、库和服务器软件等,由于这些软件的开发者会不断修复已知的安全漏洞,包括与XSS相干的漏洞。
以上就是一些防范XSS攻击的基本方法和代码示例,通过综合运用这些方法,可以大大提高网站的安全性,保护用户的信息和数据安全。
输入验证和输出编码在防范前端安全问题中有哪些应用?
输入验证的应用
输入验证主要是对用户在前端输入的数据进行检查,确保输入的数据符合预期的格式和内容要求,防止恶意数据进入体系,常见的攻击防范如SQL注入、跨站脚本攻击(XSS)等。
- 检查输入数据的类型:比如检查用户输入的年龄是否是数字类型。
- // 获取用户输入的年龄
- const userInput = document.getElementById('ageInput').value;
- // 将用户输入转换为数字类型,方便后续判断
- const inputAsNumber = Number(userInput);
- // 判断转换后的结果是否是数字
- if (!isNaN(inputAsNumber)) {
- console.log('输入的年龄是有效的数字');
- } else {
- console.log('输入的年龄不是有效的数字');
- }
复制代码 表明:起首获取用户在页面上输入的年龄,然后尝试将其转换为数字类型,最后判断转换后的结果是否是有效的数字,如果不是就说明输入有问题。
- 检查输入数据的长度:比如限定用户输入的用户名长度不能超过肯定字符数。
- // 获取用户输入的用户名
- const username = document.getElementById('usernameInput').value;
- // 设定用户名的最大长度为20个字符
- const maxLength = 20;
- // 判断用户名长度是否超过设定的最大长度
- if (username.length <= maxLength) {
- console.log('用户名长度符合要求');
- } else {
- console.log('用户名长度超过限制');
- }
复制代码 表明:获取用户输入的用户名,设定一个最大长度,然后通过比较用户名的实际长度和最大长度,来判断输入是否符合要求。
- 正则表达式验证:比方验证用户输入的邮箱格式是否精确。
- // 获取用户输入的邮箱地址
- const email = document.getElementById('emailInput').value;
- // 定义一个正则表达式来匹配邮箱格式
- const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
- // 使用正则表达式测试输入的邮箱是否匹配
- if (emailRegex.test(email)) {
- console.log('邮箱格式正确');
- } else {
- console.log('邮箱格式不正确');
- }
复制代码 表明:获取用户输入的邮箱,创建一个正则表达式用于匹配标准的邮箱格式,然后用这个正则表达式去测试用户输入的邮箱,判断格式是否精确。
输出编码的应用
输出编码是将输出的数据进行特别处理,把特别字符转换为安全的格式,防止恶意脚本在页面上执行,主要用于防范XSS攻击。
- HTML编码:将用户输入的内容显示在页面上时,对特别字符进行编码。
- // 获取用户输入的内容(可能包含恶意脚本)
- const userContent = document.getElementById('userInputContent').value;
- // 创建一个用于创建文本节点的文档片段
- const fragment = document.createDocumentFragment();
- // 创建一个文本节点,并将用户输入的内容作为文本内容
- const textNode = document.createTextNode(userContent);
- // 将文本节点添加到文档片段中
- fragment.appendChild(textNode);
- // 将处理后的文档片段插入到页面指定元素中显示
- document.getElementById('displayArea').appendChild(fragment);
复制代码 表明:获取用户输入的内容,创建一个文档片段和文本节点,把用户输入的内容作为文本节点的内容,如许特别字符就会被当作平凡文本处理,而不是可执行的脚本,最后将处理后的内容显示在页面上。
- URL编码:当将用户输入的数据作为URL的一部分时,对数据进行URL编码。
- // 获取用户输入的参数值
- const userParam = document.getElementById('paramInput').value;
- // 对用户输入的参数值进行URL编码
- const encodedParam = encodeURIComponent(userParam);
- // 构建一个包含编码后参数的URL
- const url = `https://example.com?param=${encodedParam}`;
- console.log('编码后的URL:', url);
复制代码 表明:获取用户输入的参数值,使用encodeURIComponent函数对其进行URL编码,如许特别字符就会被转换为安全的格式,然后构建一个包罗编码后参数的URL,防止恶意数据破坏URL结构或执行恶意操纵。
通过输入验证和输出编码这些本领,可以在前端有效防范多种安全问题,提高应用程序的安全性。
前端安全和后端安全有什么区别?
防护位置和对象
- 前端安全:主要是保护用户在浏览器中与网页交互时的安全。就好像是保护你家的客堂,客人(用户)直接在客堂里运动,你要确保客堂里的东西(网页元素、数据)不会被客人不警惕弄坏,或者有坏人通过客堂来偷东西。比如,防止用户输入奇怪的内容破坏网页的正常显示,或者防止黑客通过网页窃取用户输入的密码等信息。
- 后端安全:则是保护服务器以及服务器上的数据安全,相称于保护你家的仓库,仓库里存放着紧张的物品(数据)。要防止小偷(黑客)突入仓库偷东西、修改东西或者破坏仓库。比如,防止黑客入侵服务器,篡改用户数据、删除数据库记录等。
常见安全问题类型
- 前端安全
- 跨站脚本攻击(XSS):黑客往网页里注入恶意脚本,就像在你家客堂里放了一个陷阱,当用户访问这个网页时,脚本就会在用户浏览器上执行,大概会窃取用户信息或者执行其他恶意操纵。比方下面这段代码(假设是一个简朴的网页表单):
- <!DOCTYPE html>
- <html>
- <body>
- <form action="">
- <label for="name">姓名:</label><input type="text" id="name" name="name"><br>
- <label for="comment">评论:</label><input type="text" id="comment" name="comment"><br>
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
复制代码 如果没有对用户输入的comment字段进行过滤,黑客大概会输入一段恶意脚本,比如<script>alert('你被攻击了!');</script>,当其他用户提交包罗这段脚本的评论后,页面就会弹出一个警告框,这就是一个简朴的XSS攻击示例。固然,实际的攻击会更复杂,大概会窃取用户登录信息等。
- 点击劫持:攻击者通过一些技能本领,把一个透明的、不可见的iframe放在一个网页上,覆盖在一些紧张的按钮或者链接上,当用户以为点击的是当前网页的按钮时,实际上是点击了隐藏在下面的iframe中的内容,就好像有人在你面前放了一个假的按钮,你以为按的是真的,结果却触发了其他欠好的事情。比方:
- <!DOCTYPE html>
- <html>
- <head>
- <style>
- /* 隐藏iframe */
- iframe {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- opacity: 0;
- z-index: 1;
- }
- </style>
- </head>
- <body>
- <h1>这是一个被点击劫持的页面</h1>
- <a href="https://example.com">点击我去正常网站</a>
- <!-- 恶意的iframe,指向攻击者的网站 -->
- <iframe src="https://attacker.com"></iframe>
- </body>
- </html>
复制代码 在这个例子中,用户以为点击的是https://example.com的链接,但实际上大概触发了攻击者网站https://attacker.com中的一些恶意操纵。
- 后端安全
- SQL注入攻击:黑客通过在用户输入框等地方输入特别的SQL语句,来尝试修改或获取数据库中的数据。就像小偷通过奇妙的话术骗过仓库管理员,让管理员按照小偷的要求去拿仓库里的东西或者修改仓库记录。比方,有一个登录页面的代码如下:
- <?php
- $username = $_POST['username'];
- $password = $_POST['password'];
- // 连接数据库
- $conn = mysqli_connect("localhost", "username", "password", "database_name");
- // 构造查询语句,这里没有对用户输入进行安全处理
- $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
- $result = mysqli_query($conn, $query);
- if (mysqli_num_rows($result) == 1) {
- echo "登录成功";
- } else {
- echo "登录失败";
- }
- mysqli_close($conn);
- ?>
复制代码 如果用户在username字段输入' OR 1=1 --,密码随便输入,那么构造出来的SQL语句就变成了SELECT * FROM users WHERE username = '' OR 1=1 --' AND password = 'xxx',--是SQL中的注释符号,如许背面的密码验证就被注释掉了,而且1=1永远为真,以是会查询出所有效户信息,导致登录绕过,黑客就可以获取到数据库中的用户数据。
- 文件上传漏洞:如果网站答应用户上传文件,但是没有对上传的文件类型和内容进行严酷检查,黑客就大概上传恶意文件,比如一个包罗恶意代码的PHP文件,然后通过访问这个文件来执行恶意代码,就像有人把一个藏有炸弹的包裹放进了你的仓库,然后在合适的时间引爆它。比方下面是一个简朴的文件上传代码:
- <?php
- if ($_FILES["file"]["error"] > 0) {
- echo "错误:". $_FILES["file"]["error"]. "<br>";
- } else {
- // 这里没有检查文件类型,直接移动文件到服务器指定目录
- move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/". $_FILES["file"]["name"]);
- echo "文件上传成功";
- }
- ?>
复制代码 黑客可以使用这个漏洞上传一个名为shell.php的恶意文件,内容大概是<?php system('whoami');?>,上传乐成后访问这个文件,就可以在服务器上执行whoami命令,获取当前服务器的用户名,进一步大概进行更多的恶意操纵。
安全防护方式
- 前端安全
- 输入验证:对用户输入的内容进行检查,确保输入的是正当的数据。比如在注册页面,限定用户名只能是字母、数字和下划线组成,密码必须符合肯定的强度要求等。可以使用JavaScript来实现,比方:
- function validateUsername(username) {
- // 使用正则表达式检查用户名是否符合规范
- var pattern = /^[a-zA-Z0-9_]+$/;
- if (!pattern.test(username)) {
- alert('用户名只能包含字母、数字和下划线');
- return false;
- }
- return true;
- }
复制代码- - **内容安全策略(CSP)**:通过设置CSP,告诉浏览器哪些内容是可以信任的,哪些是不允许加载的,就像给浏览器制定了一套规则,让它知道哪些东西可以放进客厅。例如在HTML中可以这样设置:
复制代码- <meta http-equiv="Content-Security-Policy" content="default-src'self'; script-src'self' https://ajax.googleapis.com; style-src'self' https://fonts.googleapis.com;">
复制代码 上面的代码表示只答应从当前域名(self)以及指定的谷歌域名加载脚本和样式,其他来源的内容将被阻止加载,如允许以防止加载来自未知来源的恶意脚本和样式。
- 后端安全
- 参数化查询:在使用数据库时,使用参数化查询来避免SQL注入攻击。如允许以确保用户输入的内容不会被当作SQL语句的一部分来执行,就像给仓库管理员设置了一个严酷的流程,不管用户说什么,都不会被误导去执行危险的操纵。以PHP的PDO为例:
- try {
- $username = $_POST['username'];
- $password = $_POST['password'];
- // 创建PDO连接
- $conn = new PDO('mysql:host=localhost;dbname=database_name', 'username', 'password');
- $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- // 使用参数化查询
- $stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
- $stmt->bindParam(':username', $username, PDO::PARAM_STR);
- $stmt->bindParam(':password', $password, PDO::PARAM_STR);
- $stmt->execute();
- $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
- if (count($result) == 1) {
- echo "登录成功";
- } else {
- echo "登录失败";
- }
- } catch (PDOException $e) {
- echo "错误:". $e->getMessage();
- }
复制代码 在这个例子中,通过bindParam方法将用户输入的参数绑定到查询语句中,而不是直接将其拼接到SQL语句中,如许就可以防止SQL注入攻击。
- 访问控制:严酷控制对服务器资源的访问权限,只答应授权的用户和程序访问相应的资源。比如设置差别的用户角色,管理员可以进行所有操纵,平凡用户只能进行有限的操纵,就像给差别的人发放差别的钥匙,只有拿着精确钥匙的人才能打开相应的仓库门。在一些框架中可以如许实现:
- from flask import Flask, request, jsonify
- app = Flask(__name__)
- # 模拟用户角色和权限
- user_roles = {
- 'admin': ['create', 'read', 'update', 'delete'],
- 'user': ['read']
- }
- @app.route('/api/data', methods=['GET', 'POST', 'PUT', 'DELETE'])
- def data_operation():
- # 获取用户角色
- user_role = request.headers.get('Role')
- if not user_role:
- return jsonify({'error': '未提供角色信息'}), 401
- # 根据用户角色检查权限
- if request.method == 'GET' and 'read' in user_roles[user_role]:
- return jsonify({'data': '这是一些数据'}), 200
- elif request.method == 'POST' and 'create' in user_roles[user_role]:
- # 执行创建操作
- return jsonify({'message': '数据创建成功'}), 201
- elif request.method == 'PUT' and 'update' in user_roles[user_role]:
- # 执行更新操作
- return jsonify({'message': '数据更新成功'}), 200
- elif request.method == 'DELETE' and 'delete' in user_roles[user_role]:
- # 执行删除操作
- return jsonify({'message': '数据删除成功'}), 200
- else:
- return jsonify({'error': '权限不足'}), 403
- if __name__ == '__main__':
- app.run(debug=True)
复制代码 在这个Flask应用中,根据用户哀求头中的Role字段来判断用户的角色和权限,只有具有相应权限的用户才能执行对应的操纵,否则返回权限不足的错误。
总的来说,前端安全主要关注用户界面和浏览器层面的安全,而后端安全则侧重于服务器和数据的保护,两者相互配合,共同保障整个体系的安全。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |