A用户可以将这个请求发送给B用户
1.操作独霸整站的布局,制止泄露站点敏感目录
问题:老网站一般在跟目录下放上index.php、register.php、login.php,访谒注书页面跳转到,不易扩展和维护
解决: 如果url为=register这种,通过变量来跳转到相应页面便于打点,dvwa靶机环境用的就是种搭建的思想
长处:1.不会袒露网站后台绝对路径=admin.php猜测不出网站的后台目录
2.易维护,不需改削太多代码,=admin.php想改削后台地点,只需改削swtich的代码和后台文件名
3.布局严谨,有条理感
4.统一打点身份认证。可在在入口处进行身份认证,如游客不成访谒网站,只有登录会员才有权限浏览,可在入口页面打点
5.通过绝对路径访谒页面报错, 报错
在页面添加<?php if(!defined(‘WWW_ROOT‘)) {header("HTTP/1.1 404 Not Found"); exit;} ?>实现
2.使用预编译语句,制止sql注入
2.1.数据与代码未区分
一条sql语句select * from admin where username=‘admin‘ password=‘xxxxx‘,admin和xxxx是数据,如未做措置惩罚惩罚,用户可以输入admin=‘ or 1=1 #,这条语句酿成select * from admin where username=‘‘ or 1=1 #‘ password=‘xxxxx‘ ,#将后面的代码注释失,username=‘‘为假,1=1为真,所以最终功效为真,将所有数据都盘问出来
2.2 预编译
后端SQL语句:select * from admin where username=‘?‘ password=‘?‘,将这条sql语句编译成stmt东西中,要领stmt->bind_param将用户输入的数据绑定到?的位置,这样通过类来操纵,所以sql语句的执行都要进行预编译。
Mysqli的预措置惩罚惩罚
1.创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
2.预措置惩罚惩罚,也就是封装成stmt类
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
3.绑定参数
$stmt->bind_param("sss", $firstname, $lastname, $email);
4.设置参数值
$firstname=’firstname’
5.执行
$stmt->execute();
不过此刻php常用pdo来进行sql操纵
1.pdo实例化
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
2.预措置惩罚惩罚
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (:firstname, :lastname, :email)");
3.绑定参数
$stmt->bindParam(‘:firstname‘, $firstname);
$stmt->bindParam(‘:lastname‘, $lastname);
$stmt->bindParam(‘:email‘, $email);
4.赋值及执行
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();
3预防XSS代码,如果不需要使用cookie就不使用
不幸被xss注入,页面不使用cookie,可降低风险
4. 限制用户权限,预防CSRF
4.1举一个例子,给某篇文章点赞,一开始设计的是get请求的方法,如A用户点赞某篇文章的url请求是
?act=support&articleid=12,A用户可以将这个请求发送给B用户,B用户点击此链接也倡议了一个点赞的请求
4.2post请求。Get请求太容易操作,,如是设计成post来倡议这个点赞的请求,如以下代码:
<form action="http://localhost/?act=support" method="POST">
<input type="hidden" value="12">
<input type="submit" value="赞">
</form>
第一个input中呈现了文章的id,可以结构form表格,或ajax,或操作burpsuite结构打击页面,发送给B,B点击倡议了点赞的post请求
4.3验证码来限制。这样会降低用户体验感,现实中也未见点个赞还需要输入验证码的情形。
4.4增加token验证。客户端每次访谒?act=support&articleid=12页面时,处事器城市随机生成一个token,并发送给客户端,客户端点赞时发送这个参数和处事端对照,如果一样点赞告成,这里如果页面存在xss的缝隙,可以通过js获取到token值,告成倡议打击,这种方法是目前常用且有效的手段
4.5 referer验证。访谒?act=support&articleid=12点赞时,验证请求包中的rerferer值,来验证其页面来源,抱负情况下,当A用户将打击页面发给B,B点击,referer来源必定不一致导致点赞掉效,但是打击者可以改削打击页面的网站名,文件名,目录名为点赞域名以混过rerferer检测
5严格控制上传文件类型
5.1前端验证不成靠的
5.2mime验证不成靠的
5.3白名单验证,就是取文件名, 如array(‘jpg‘,‘gif‘,‘png‘,‘bmp‘),文件名为数组中的元素才可上传,但是要注意解析缝隙
5.4 重定名,此刻一般定名法则为日期时间+随机数+白名单后缀对上传的文件进行重定名,这样就算被上传webshell,也因为打击者无法猜度出文件名而导致无法访谒webshell
5.5禁止php代码的执行,可以参考文章webshell禁止你执行
6.加密混淆javascript代码,提高打击门槛
很多xss缝隙都是在本地阅读网页源码发明的,加密javascript代码提高阅读门槛
7. 使用更高级的hash算法生存数据库中重要信息
目前一般破解hash的手段
7.1彩虹表。可以去官网下载,几百g,经常那这个去破解系统的sam文件
7.2 md5网站,百度一下就有,解密简单的
8.验证码安适
验证验证码是否安适可以通过一下几个方法:
8.1 验证码是否前端生成,可抓包绕过
8.2 单个验证码是否有有效期,单个验证码可反复使用
8.3 验证码内容输出到客户端,打击者可通过js代码获取到
8.4 验证码太弱
验证码太简单,导致开源的tessertact OCR就可以识别。这里有一个最新机器识别绕过12306
火车票验证码的实例
参考链接:https://www.leavesongs.com/PENETRATION/php-secure.html
php安适之我见
标签:
原文地点:https://www.cnblogs.com/qzdlp/p/12134324.html
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32426.html