Ajax
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)还有JSON数据。
AJAX还有一个最大的特点就是,当服务器响应时,不用刷新整个浏览器页面,而是可以局部刷新。这一特点给用户的感受是在不知不觉中完成请求和响应过程。
应用场景:
(1)、搜索引擎关键字
(2)、注册时信息校验
ajax使用
使用ajax 来验证用户名是否已经被注册过了。
<script>
$(function () {
{#alert("ahah");#}
$("#name").blur(function () {
{#alert("哈哈");#}
$.ajax({
"url": "/register_ajax/", // 提交的路径
"type": "GET", // 提交方式
"data": {"name": $("#name").val()}, // 携带的参数
"success": function (data) { //回调函数,当请求成功后自动触发此方法
{#console.log(data) // data: 服务端返回的内容#}
{#alert(data["result"])#}
if (data.result == "true") {
{#alert("此用户已经存在...")#}
$("#error").text("此用户已经存在...")
} else {
$("#error").text("")
}
}
});
})
})
</script>
- XML语言
HTML用于显示数据而XML用于保存和传输数据;
xml在保存结构化和层次化的数据比较有优势;
例如 中国有北京和上海两个直辖市,每个市又有2个区,种具有结构的数据xml语言保存很有优势。
- JSON语言
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
JSON去掉多余 XML标签元素,只返回有效数据部分,是一种更优的方案
官网: http://www.json.org/
Json中数据格式分成两种:对象格式的数据和数组格式的数据
对象格式: {key:value,key:value,key:value }
键:必须是字符串常量 {name : “张三”}和 {“name”:”张三”}是等价的;
值:加不加引号,是有区别的,不加引号是变量,加引号常量字符串
键值对之间使用 ” , ” 分开,键值之间用 “:”
数组格式:[值1, 值2 ,值3 ] 例如[“zs”,”ls”,”ww”]
组合后复杂格式:
[{name:‘aaa’}, {name:‘bbb’}, {name:ccc}] 表示三个对象数组
CSRF
CSRF:CSRF跨站点请求伪造(Cross—Site Request Forgery)CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。
CSRF攻击攻击原理及过程如下:
- 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A; - 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
- 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
CSRF防御:
现在业界对CSRF的防御,一致的做法是使用一个Token(Anti CSRF Token)。
-
用户访问某个表单页面。
-
服务端生成一个Token,放在用户的Session中,或者浏览器的Cookie中。
-
在页面表单附带上Token参数。
-
用户提交请求后, 服务端验证表单中的Token是否与用户Session(或Cookies)中的Token一致,一致为合法请求,不是则非法请求。
这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。
token字符串的前32位是salt, 后面是加密后的token, 通过salt能解密出唯一的secret。
django会验证表单中的token和cookie中token是否能解出同样的secret,secret一样则本次请求合法。
Django中配置csrf的setting文件
html中加csrf
结论:如果在django中把刚才的那句注释掉,那么html页面上不写csrf是可以的,否则会报错。