小迪安全 Web安全 第十六天 - PHP开发 - 个人博客项目&JS-Ajax&前端逻辑&购物&登录&上传
一、ajax实现简单的文件上传
(一)代码示例
<?php //php做处理 //php实现,验证的代码看不到,只能黑盒测试 //js实现,验证的代码能看到,可以白盒测试 header("Content-Type:text/html;charset=utf-8"); //获取上传文件名 @$file_name = $_FILES['upload']['name']; //获取上传文件类型 @$file_type = $_FILES['upload']['type']; //获取上传文件大小 @$file_size = $_FILES['upload']['size']; //获取上传文件临时文件名 @$file_tmpname = $_FILES['upload']['tmp_name']; //获取上传文件是否错误 @$file_error = $_FILES['upload']['error']; echo $file_name . "ajax
"; echo $file_type . "
"; echo $file_size . "
"; echo $file_tmpname . "
"; echo $file_error . "
"; if(@$file_error>0){ echo "文件上传出错!"; }else{ move_uploaded_file(@s_FILES["upload"]["tmp_name"],"upload/" . @$_FILES["upload"]["name"]); echo "文件存储在:" . "upload/" . @$_FILES["upload"]["name"]; } ?>
(二)如何判断文件上传是js验证还是php验证
1、浏览器查看源代码,源代码中有验证文件的js代码即为js验证。
2、查看验证时间,js验证时间非常快,php相对有延迟。
(三)js验证文件易出现的漏洞
1、js验证在前端实现,用户可在浏览器中直接看到验证过程的源代码,用户可以直接进行白盒测试,通过禁用js或修改源代码或修改参数的方式直接绕过验证。
2、php验证在后端服务器中实现,用户看不到源代码,只能进行黑盒测试,绕过概率很低,验证相对安全。
二、ajax实现登录验证
(一)代码示例
1、前端
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ajax Logintitle>
head>
<body>
账号:<input type="user" class="user">
密码:<input type="password" class="password">
<button>登录button>
<script src="js/jquery-1.12.4.min.js">script>
<script>
$('button').click(function () {
$.ajax({
type:'post',
url:'ajax.php',
dataType:'json',
data:{
myUname:$('.user').val(),
myUpass:$('.password').val()
},
success:function (res) {
if(res.infocode==1){
alert('登录成功!')
}else{
alert('登录失败!')
}
}
})
})
script>
body>
html>
2、后端
<?php $success = array('msg'=>'ok'); $username = $_POST['myUname']; $password = $_POST['myUpass']; //验证用户提交的账号和密码,由于这里只做测试,只做简单实现,实际项目中应连接到数据库进行验证 if($username=='xiaodi' && $password=='123456'){ $success['infocode'] = 1; //1为成功登录 }else{ $success['infocode'] = 0; //0为登录失败 } echo json_encode($success); ?>
(二)判断登录验证是js还是php
1、js代码ajax请求验证后,读取返回的数据,浏览器还会对js ajax代码进行解析,然后才会显示请求结果,此过程用户可以干预、篡改结果参数实现绕过。
2、php验证直接在服务器端完成,完成验证后直接将结果返回给客户端,此过程用户无法干预,就算篡改结果服务器也不会再予以理会。
注:能否实现绕过最终要看处理结果由谁操作,若最终处理结果由前台控制,则可以绕过。
三、ajax实现购物功能
(一)代码示例
<?php header("Content-Type:text/html;charset=utf-8"); $success=array('msg'=>'ok'); $price=$_POST['price']; $num=$_POST['number']; $m=$price*$num; if($m<10000){ $success['code']=1; }else{ $success['code']=0; } echo json_encode($success); ?>
(二)易出现的漏洞
1、若处理结果以js代码实现,则用户可以通过修改传递参数实现验证绕过