boss看见的总结
一般PHP面试都会问到前端知识、尤其VUE各位都需要懂点前端内容
PHP:
CSRF和XSS攻击分别是什么
解答:
1.CSRF的基本概念、缩写、全称
CSRF(Cross-site request forgery) 跨站请求伪造
2.CSRF的攻击原理
用户是网站A注册用户,且登录进去,于是网站A就给用户下发cookie
要完成一次CSRF攻击名,受害者必须满足两个必要条件
(1)登录受信任网站A、并在本地生成Cookie (如果用户没有登录网站A,那么网站B在诱导时候,请求网站A的api接口时,会提示登录)
(2)在不登出A的情况下,访问危险网站B(其实是利用了网站A的漏洞)
我们在讲CSRF时,一定要把上面的两点说清楚。
温馨提示:Cookie保证了用户可以处于登录状态、但是网站B其实拿不到Cookie
3.CSRF如何防御
方法一、Token验证:(用的最多)
(1)服务器发送给客户端一个TOKEN;
(2)客户端提交的表单中带着这个TOKEN;
(3)如果这个token不合法,那么服务器拒绝这个请求
方法二、隐藏令牌:
把token 隐藏在http的head头中
方法二和方法一有点像、本事没有太大区别、只是使用方式上有区别
方法三、Referer验证:
Rederer指的是页面请求来源、意思是、只接受本站的请求、服务才做响应、如何不是就拦截
XSS
1、XSS的基本概念
XSS(Cross Site Scripting) 跨域脚本攻击
Xss的攻击原理:
不需要你做任何的登录认证、他会通过合法的操作(比如在url中输入、在评论框中输入),向你得页面注入脚本可能是JS、html代码块等
最后导致的结果可能是:
盗用Cookie破坏页面的正常结构、插入广告等恶意内容D-doss攻击
xss的攻击方式:
(1)反射型
发出请求是,xss代码出现在url中、作为输入提交到服务器端、服务器端解析后响应,xss代码随响应内容传回给游览器、最后游览器解析进行xss代码、这个过程像一次反射、所以叫反射型xss
(2)存储型存
储型xss和反射型xss的差别在于提交的代码会存储在服务端(数据库、内存、文件系统等),下次请求是目标页面时不用提交xss代码
xss的防范措施(encode + 过滤)
xss得防范措施主要有三个
1、编码:
对用户输入得数据进行Html Entity 编码
把字符串转换成转义字符
encode 得作用是将$var 等一些字符进行转化、是的游览器在最终输出结果上一样得
2、过滤:
移动用户输入的和事件相关得属性、入onerror 可以自动触发攻击
有onclikc等移除用户输入的style节点、script节点iframe节点
3、校正
避免直接对HTMLEntity进行解码使用DOMparse 转换、校正不配对得DOM标签
CSRF和XSS区别
区别一、
CSRF:需要用户先登录网站A获取cookie
XSS:不需要登录
区别二、
CSRF:是利用网站A本身漏洞,去请求网站A得API
XSS:是向网站A注入js代码、然后执行js里面的代码、篡改网站A内容
抽象类和接口分别是什么
抽象类:
是基于类来说,其本身就是类,只是一种特殊的类,不能直接实例,可以在类里定义方法,属性。类似于模板,规范后让子类实现详细功能。
接口:
主要基于方法的规范,有点像抽象类里的抽象方法,只是其中对于抽象方法来说,更加独立。可让某个类通过组合多个方法来形成新的类。
抽象类和接口的相同点:
- 都是用于声明某一种事物,规范名称、参数、形成模块、未有详细的实现细节。
- 都是通过类来实现相关的细节工作。
- 语法上,抽象类的抽象方法与接口一样,不能有方法体、即{}符号。
- 都可以用继承,接口可以继承接口形成新的接口。
抽象类与接口的不同点:
- 抽象类可以有属性、普通方法、抽象方法,但接口不能有属性、普通方法、可以有常量
- 抽象类内未必有抽象方法,但接口内一定会有“抽象”方法
- 语法上有不同
- 抽象类用abstract关键字在类前声明,且有class声明为类,接口使用interface来声明,但不能用class来声明,因为接口不是类。
- 抽象类的抽象方法一定要用abstract来声明,而接口则不需要
- 抽象类使用extends关键字让子类继承父类后,在子类实现详细的抽象方法,而接口则是用implements让普通类再类里实现接口的详细方法、且接口可以一次性实现多个方法、用逗号分开各个接口即可
各自的特点:
- 抽象类内未必有抽象方法,但有抽象方法的类,则必是抽象类
- 抽象类内,即便全是具体方法,也不能够实例化,只要新建类来继承后,实例继承类才可以
- 接口可以让一个类一次性实现多个不同的方法
- 接口本身就是抽象的,但注意不是抽象类,因为接口不是类,只是其方法是抽象的。所以,其也是抽象的
应用与结合
一、抽象类与接口的结合
<?php
interface work{
public function say();
}
abstract class a implements work{
public function showlove(){
echo 'love you<br />';
}
}
class b extends a{
public function say(){
echo 'hello, i m in b';
}
}
$k=new b();
$k->say();
/*
以上程序能正常执行
普通类implements接口后,就变成了抽象类了,这就好像是直接给抽象类增加了一个抽象方法。
*/
二、接口与继承的结合
父类是普通类,子类继承后,同时在子类里实现接口。
疑问:这样的做法是否有意义,在实际开发中是否有这样的应用?
<?php
interface kk{
public function say();
}
class a {
public function show(){
echo '我是父类<br />';
}
}
class b extends a implements kk{
public function say(){
echo '我是继承A类,同时实现say接口的<br />';
}
}
$b=new b();
$b->show();//我是父类
$b->say();//我是继承A类,同时实现say接口的
谈谈对设计模式的了解
创建型模式
工厂模式、简单工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。
记忆方式: 3工1单(工厂、简单、抽象、单例)
结构性模式
适配器模式、 组合模式、 代理模式、外观模式、装饰器模式、桥接模式、享元模式。
记忆方式:乔装歪戴想始祖(桥接、装饰器、外观、代理、享元、适配器、组合)
行为型模式
观察者模式、迭代子模式、策略模式、命令模式、模板方法模式、责任链模式、备忘录模式、状态模式、访问者模式、中介者模,注册模式。
记忆方式:观爹测命(观察者、迭代、策略、命令)
谈谈对微服务的理解
说说垃圾回收机制
高并发的解决方案
如何防范SQL注入
什么是时序攻击
魔术方法有哪些
Laravel:
依赖注入实现原理
常用集合方法
常用辅助函数
常用中间件
生命周期
Swoole:
谈谈对协程的理解
和php-fpm的区别
MYSQL:
MySAM和InnDB区别
索引结构(解释B+树)
select执行过程
事务隔离级别
索引回表
索引失效
分库分表
读写分离
Redis:
数据类型
淘汰策略
事务机制
缓存击穿
分布式锁
集群
Vue:
双向数据绑定原理
组件通信
生命周期
其他:
ElasticSearch
MeiliSearch
RabbitMQ
MongoDB
Kafka
网站:
- http://xuesql.cn/ 此网页是练习sql语句你可以跟着步骤走、联系原生sql语句
- https://www.topgoer.cn Go 语言
- https://www.code-nav.cn 编程导航学习资源程序员鱼皮的哈哈
|