当前位置:首页 > Web开发 > 正文

A用户可以将这个请求发送给B用户

2024-03-31 Web开发

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