无域名网站 能否被百度,网站开发的主要阶段,荷兰网站域名,湖北商城网站建设多少钱文章目录 一、重定向进阶功能1.1 重定向回上一个页面1.2 对URL进行安全验证 二、使用Ajax技术发送异步请求2.1 什么是Ajax2.2使用jQuery发送Ajax请求 三、服务器推送四、web安全规范1. 注入攻击2. XSS攻击3. CSRF攻击 一、重定向进阶功能
1.1 重定向回上一个页面 有时候#… 文章目录 一、重定向进阶功能1.1 重定向回上一个页面1.2 对URL进行安全验证 二、使用Ajax技术发送异步请求2.1 什么是Ajax2.2使用jQuery发送Ajax请求 三、服务器推送四、web安全规范1. 注入攻击2. XSS攻击3. CSRF攻击 一、重定向进阶功能
1.1 重定向回上一个页面 有时候我们在某些界面执行操作一些操作后不希望界面跳转到其他指定网页上而希望网页能重定向为用户刚才浏览的界面以便继续完成操作例如在某个页面需要登录后才能进行操作我们希望登录后不跳转到主页界面而是重定向为刚才操作的页面从而能够方便的继续刚才未完成的操作。 获取上一个页面的URL 要重定向为上一个页面最关键的是要获取上一个页面的URL。获取的方法主要有两种
HTTP referer 是一个用来记录请求发源地址的HTTP首部字段即访问来源。当用户在某个网站点击链接时浏览器发送请求的数据中包含的HTTP_REFERER字段记录了用户所在的原站点URL。 在Flask中我们可以通过request.referrer进行获取。
return redirect(request.referrer)# 为了防止用户出于隐私保护设置清除了或修改了该字段添加备用选项
return redirect(request.referrer or url_for(index)) 查询参数 除了从referer中获取之外我们还可以在URL中手动加入包含当前页面URL的查询参数一般命名为next
app.route(/index)
def index():return a href%s登陆/a % url_for(login, nextrequest.full_path)app.route(/login)
def login():执行登陆操作......return rediect(request.args.get(next))# 添加备选项return rediect(request.args.get(next) url_for(index)))通用重定向函数避免重复代码
def redirect_back(defaulthello, **kwargs):for target in request.args.get(next), request.referrer:if target:return redirect(target)return redirect(url_for(default, **kwargs))app.route(/login)
def login:return redirect_back()1.2 对URL进行安全验证
由于referer和next容易被篡改的特性如果不对这些值进行验证则会形成开放重定向漏洞。 URL验证函数
for urllib.parse import urlparse, urljoin
from flask import requestdef is_safe_url(target):ref_url urlparse(request.host_url)test_url ulparse(urljoin(request.host_url, target))return test_url.scheme in (http, https) and ref_ul.netloc test_url.netloc# 在重定向通用代码中使用
def redirect_back(defaulthello, **kwargs):for target in request.args.get(next), request.referrer:if not target:continueif is_safe_ul(target):return redirect(target)return redirect(url_for(default, **kwargs))
这段代码定义了一个名为 is_safe_url() 的函数用于判断给定的 URL 是否安全。
具体来说is_safe_url() 函数接受一个参数 target表示要检查的 URL。在函数体内首先使用 urlparse() 函数从当前请求的 request.host_url 中解析出引用 URL即当前页面的 URL并将其赋值给 ref_url 变量。然后使用 urljoin() 函数将 request.host_url 和 target 合并成完整的 URL并使用 urlparse() 函数解析出测试 URL并将其赋值给 test_url 变量。
最后函数会判断 test_url 是否安全。具体来说它会检查 test_url 的协议是否为 “http” 或 “https”并且检查 test_url 的域名与 ref_url 的域名是否相同。如果这两个条件都满足那么 is_safe_url() 函数将返回 True表示 URL 是安全的否则返回 False表示 URL 不安全。
二、使用Ajax技术发送异步请求
2.1 什么是Ajax
AjaxAsynchronous JavaScript and XML是一种在网页中使用的技术通过在后台与服务器进行异步通信实现页面内容的局部更新而无需刷新整个页面。
传统的网页交互是同步的即用户发起请求后需要等待服务器返回完整的页面并刷新整个页面才能看到结果。而使用 Ajax 技术可以在不刷新整个页面的情况下通过发送异步请求获取服务器返回的数据并使用 JavaScript 动态更新页面的部分内容。
Ajax 基于以下几个核心的技术
XMLHttpRequest 对象用于在后台与服务器进行数据交换。通过创建 XMLHttpRequest 对象可以发送请求和接收服务器返回的数据。JavaScript 和 DOM 操作通过 JavaScript 代码和 DOM文档对象模型操作可以动态地修改页面的内容将服务器返回的数据插入到指定的位置更新页面的部分内容而不需要刷新整个页面。异步请求和回调函数Ajax 请求是异步的意味着浏览器在发送请求后不会阻塞页面的其他操作而是继续执行后续的 JavaScript 代码。当服务器返回数据后可以通过回调函数处理这些数据更新页面或执行其他操作。
Ajax 技术它可以用于实现实时搜索、动态加载内容、表单验证、无刷新提交等功能。
2.2使用jQuery发送Ajax请求
jQuery中文网
并不一定需要使用jQuery来实现Ajax请求可以使用原生的XMLHttpRequest其它JavaScript框架内置的Ajax接口或这使用更新的Fetch API来发送异步请求。
三、服务器推送
服务器推送Server Push是一种在客户端与服务器之间建立持久连接并由服务器主动向客户端发送数据的通信方式。它与传统的客户端发起请求、服务器响应的模式不同可以实现实时更新数据或推送通知给客户端而无需客户端主动请求。 常见实现方式和协议
名称说明传统轮询在特定的时间内客户端使用Ajax技术不断向服务器发起HTTP请求然后获取的新的数据并更新页面。长轮询和传统相比如果服务器一直没有返回数据那就保持连接一直开启直到有数据时才返回取回数据后再次发送另一个请求。Server-Sent EventsSSESSE 是一种基于 HTTP 的服务器推送技术。通过 SSE服务器可以使用单向的持久连接向客户端发送数据。客户端通过 EventSource API 接收服务器发送的事件流实现实时更新数据或接收通知。WebSocketWebSocket 是一种支持全双工通信的网络协议它提供了双向的持久连接使得服务器可以主动向客户端发送数据。通过 WebSocket服务器可以实时地将更新的数据或通知推送给客户端而客户端也可以向服务器发送消息。
四、web安全规范
1. 注入攻击
重点注意SQL注入攻击
原理在编写SQL语句时如果直接将用户传入的数据作为参数使用字符串拼接的方式插入SQL语句中那么攻击者就可以通过注入其它语句来执行攻击操作进行数据库增删改查。防范使用orm验证输入类型参数化查询转义特殊字符等。
2. XSS攻击
原理又称跨站脚本攻击历史悠久是注入攻击的一种通过将代码注入被攻击者的网站中用户一但访问就会执行被注入的恶意脚本。防范HTML转义验证用户输入
3. CSRF攻击
原理又称跨站伪造请求利用用户已经通过身份验证的会话来执行未经授权的操作的攻击方式。攻击者通过欺骗用户访问恶意网站或点击恶意链接利用用户的身份来发送伪造的请求。防范使用正确的HTTP请求csrf令牌校验。