PHP之linux、apache和nginx与安全优化面试题

1.linux常用命令
查看目录pwd  创建文件touch  创建目录mkdir  删除文件rm  删除目录rmdir

移动改名文件 mc   查询目录find    修改权限chmod  压缩包 tar  安装 yum install 修改文件vi

查看进程ps   停止进程kill   定时任务crontab
2、nginx的优化
  1. gzip压缩优化

  2. expires缓存

  3. 网络IO事件模型优化

  4. 隐藏软件名称和版本号

  5. 防盗链优化

  6. 禁止恶意域名解析

  7. 禁止通过IP地址访问网站

  8. HTTP请求方法优化

  9. 防DOS攻击单IP并发连接的控制,与连接速率控制

  10. 严格设置web站点目录的权限

  11. 将nginx进程以及站点运行于监牢模式

  12. 通过robot协议以及HTTP_USER_AGENT防爬虫优化

  13. 配置错误页面根据错误码指定网页反馈给用户

  14. nginx日志相关优化访问日志切割轮询,不记录指定元素日志、最小化日志目录权限

  15. 限制上传到资源目录的程序被访问,防止木马入侵系统破坏文件

  16. FastCGI参数buffer和cache配置文件的优化

  17. php.ini和php-fpm.conf配置文件的优化

  18. 有关web服务的Linux内核方面深度优化(网络连接、IO、内存等)

  19. nginx加密传输优化(SSL)

  20. web服务器磁盘挂载及网络文件系统的优化

3、常见的 PHP 安全性攻击  

SQL注入:用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。
防止:

使用mysql_real_escape_string()过滤数据

手动检查每一数据是否为正确的数据类型

使用预处理语句并绑定变量

参数化SQL:是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,用@或?来表示参数。

XSS攻击 :跨站点脚本攻击,由用户输入一些数据到你的网站,其中包括客户端脚本(通常JavaScript)。如果你没有过滤就输出数据到另一个web页面,这个脚本将被执行。
防止:为了防止XSS攻击,使用PHP的htmlentities()函数过滤再输出到浏览器。

CSRF:跨站点请求伪造,是指一个页面发出的请求,看起来就像是网站的信任用户,但是是伪造的
防止:一般来说,确保用户来自你的表单,并且匹配每一个你发送出去的表单。有两点一定要记住:

对用户会话采用适当的安全措施,例如:给每一个会话更新id和用户使用SSL。

生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交时检查它。 如laravel中的 _token

代码注入:代码注入是利用计算机漏洞通过处理无效数据造成的。问题出在,当你不小心执行任意代码,通常通过文件包含。写得很糟糕的代码可以允许一个远程文件包含并执行。如许多PHP函数,如require可以包含URL或文件名。
防止代码注入

过滤用户输入

在php.ini中设置禁用allow_url_fopen和allow_url_include。这将禁用require/include/fopen的远程文件

4、请解释PHP中的性能优化是什么 

性能优化是一种提高应用程序性能的技术,可以使应用程序更快、更可靠和更节省资源。在PHP中,可以使用各种性能优化技术,例如使用缓存、优化数据库查询、使用合适的数据结构和算法、使用异步编程和使用PHP加速器等。

5、请解释PHP中的代码审查是什么 

代码审查是一种评估和改进代码质量和安全性的技术,可以使应用程序更可靠和更安全。在PHP中,可以使用各种代码审查工具,例如PHP_CodeSniffer和PHPMD等,来自动化地检查代码质量和安全性,并提供代码改进建议。

6、请解释PHP中的安全性是什么 

安全性是一种保护应用程序免受恶意攻击的技术,可以使应用程序更可信和更安全。在PHP中,可以使用各种安全性技术,例如输入过滤、加密、验证和访问控制等,来保护应用程序免受恶意攻击

7、请解释PHP中的单元测试是什么
单元测试是一种测试应用程序单个组件的技术,可以使应用程序更可靠和更健壮。在PHP中,可以使用各种单元测试框架,例如PHPUnit和Codeception等,来编写和运行单元测试,以保证应用程序的质量和可靠性。 希望以上PHP高级面试题及其答案对您有所帮助
8、什么是微服务架构 

微服务架构是一种软件架构设计风格,将一个大型的应用程序拆分成一组小型、自治的服务。每个服务都可以独立部署、扩展和管理,并通过轻量级的通信机制进行交互。每个服务专注于解决特定的业务问题,通过独立开发、部署和运维来提高开发效率、灵活性和可伸缩性。 微服务架构的特点包括:

  1. 拆分性:将一个大型的应用程序拆分成多个小型的服务,每个服务关注单一的业务功能。
  2. 独立性:每个服务都是独立部署和运行的,可以使用不同的技术栈和开发语言。
  3. 松耦合:服务之间通过轻量级的通信机制进行交互,如RESTful API、消息队列等。
  4. 可伸缩性:每个服务都可以根据需要独立扩展,无需整体扩展整个应用程序。
  5. 独立部署:每个服务可以独立部署,不会影响其他服务的运行。
  6. 自治性:每个服务都有自己的数据库和业务逻辑,可以独立管理和运维。
  7. 高可用性:由于每个服务都是独立的,可以实现多个副本来提高系统的可用性。 微服务架构可以带来以下优点:
  8. 灵活性:每个服务可以独立开发、部署和扩展,使团队更加灵活和快速响应业务需求。
  9. 可维护性:每个服务的代码量相对较小,易于理解和维护。
  10. 可扩展性:可以根据需要独立扩展每个服务,提高系统的性能和容量。
  11. 高可用性:由于每个服务是独立运行的,可以实现容错和故障隔离,提高系统的可用性。
  12. 技术异构性:每个服务可以使用不同的技术栈和开发语言,根据实际需求选择合适的工具和技术。 然而,微服务架构也带来了一些挑战,如服务间的通信复杂性、分布式事务处理、服务的监控和管理等。因此,在使用微服务架构时需要权衡利弊,并根据实际情况进行合理的设计和实施。
9、服务器受到dos攻击,这个问题如何应付?

当服务器受到DOS(拒绝服务)攻击时,可以采取以下措施来应对:

  1. 增加带宽和服务器资源:通过增加服务器的带宽和硬件资源(如CPU、内存等),可以提高服务器的处理能力,从而更好地应对攻击流量。
  2. 使用DDoS防护服务:可以使用专门的DDoS防护服务提供商,他们提供的服务可以帮助过滤和清洗掉大部分恶意流量,确保正常用户的访问不受影响。
  3. 配置防火墙和负载均衡器:通过配置防火墙规则,可以过滤掉非法的请求流量。同时,使用负载均衡器可以将流量分散到多个服务器上,避免单一服务器被攻击压垮。
  4. 使用流量限制和限制访问措施:通过设置流量限制,可以限制单一IP地址或单一用户的访问频率,防止攻击者发起大量请求。此外,也可以通过IP黑白名单、验证码等方式限制访问。
  5. 监控和日志分析:及时监控服务器的状态和流量情况,以便及时发现异常和攻击。同时,对攻击事件进行日志分析,了解攻击者的特征和攻击方式,以便更好地应对。
  6. 与ISP合作:若DOS攻击严重影响到业务正常运行,可以与互联网服务提供商(ISP)合作,请求其协助解决问题,例如通过流量清洗和流量分流等方式。 需要注意的是,以上措施仅是一些常见的方法,具体应对措施需要根据实际情况来确定。在应对DOS攻击时,建议及时与网络安全专业人士或相关服务提供商进行沟通和协助。
10、nginx负载均衡 

Nginx是一个高性能的开源Web服务器和反向代理服务器,它也可以用作负载均衡器。 负载均衡是指将网络请求分配到多个服务器上,以平衡服务器的负载,提高系统的性能和可靠性。Nginx通过使用多种负载均衡算法,如轮询、IP哈希、最小连接数等,将请求分发到多个后端服务器上。 在Nginx中配置负载均衡非常简单。以下是一个基本的Nginx负载均衡配置示例:

http {
  upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
  }
  server {
    listen 80;
    server_name example.com;
    location / {
      proxy_pass http://backend;
    }
  }
}

上述配置中,我们定义了一个名为backend的上游服务器组,该组包含了三个后端服务器。然后,在主服务器的配置中,我们将请求的处理代理到backend上游服务器组。 当有请求到达Nginx服务器时,Nginx将会根据定义的负载均衡算法,将请求分发到上游服务器组中的后端服务器上。这样可以通过增加服务器的数量来提高系统的并发处理能力,同时也可以实现故障转移和高可用性。 总结来说,Nginx提供了一种简单而有效的方式来实现负载均衡,通过将请求分发到多个后端服务器上,提高系统的性能和可靠性。

 11、什么是跨站脚本攻击(XSS)?如何预防XSS攻击?

跨站脚本攻击(XSS)是一种攻击方式,攻击者通过向Web应用程序注入恶意脚本来获取用户的敏感信息或执行恶意操作。为了预防XSS攻击,可以采取以下措施:

  • 对用户输入进行过滤和验证,确保只允许合法的数据输入。
  • 对用户输入进行编码,将特殊字符转义为HTML实体。
  • 设置HTTP头部中的X-XSS-Protection来启用浏览器的内置XSS过滤功能。
  • 使用Content Security Policy(CSP)来限制资源的加载和执行。
12、apache和nginx区别

Apache和Nginx是两种常见的Web服务器软件,它们有以下几个主要区别:

  1. 架构和设计:Apache是基于多进程模型的服务器,每个连接都会创建一个独立的进程。而Nginx采用事件驱动的异步非阻塞模型,可以处理更多的并发连接,且内存消耗更少。
  2. 资源消耗:由于Nginx采用了较为轻量级的设计,它在处理高并发请求时的资源消耗更少,占用的内存更少。相比之下,Apache在处理大量并发请求时可能会占用更多的系统资源。
  3. 静态文件处理:Nginx对于静态文件的处理更加高效,可以通过内存缓存和磁盘缓存来提升性能。而Apache在处理静态文件时,可能会占用更多的系统资源。
  4. 可扩展性:由于Nginx的事件驱动和非阻塞模型,它在高并发环境下具有更好的可扩展性。相比之下,Apache的多进程模型在处理大量并发请求时可能会导致系统资源不足。
  5. 配置和模块:Apache的配置文件相对较为复杂,但也提供了更多的扩展模块和功能。Nginx的配置文件相对简单,但也提供了常用的功能和模块。 总的来说,Apache适用于传统的Web应用场景,提供了丰富的功能和扩展性。而Nginx适用于高并发的静态文件服务、反向代理和负载均衡等场景,具有较高的性能和可扩展性。选择使用哪个服务器取决于具体的需求和应用场景。
13、请解释PHP中的Docker是什么? 

Docker是一种轻量级的容器化技术,可以将应用程序及其依赖项打包到一个容器中,以便于在不同的环境中部署和运行。在PHP中,可以使用Docker来构建和运行PHP应用程序,可以将PHP应用程序及其依赖项打包到一个Docker镜像中,并在不同的环境中部署和运行。

14、对于大流量的网站,采用什么样的方法来解决访问量问题? 

首先,确认服务器硬件是否足够支持当前的流量

其次,优化数据库访问。

第三,禁止外部的盗链。

第四,控制大文件的下载。

第五,使用不同主机分流主要流量

第六,使用流量分析统计软件

第七,尽量使用静态页,缓存 

15、如何处理负载,高并发?

1、HTML静态化
效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。
2、图片服务器分离
把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如七牛等
3、数据库集群和库表散列及缓存
数据库的并发连接为100,一台数据库远远不够,可以从读写分离、主从复制,数据库集群方面来着手。另外尽量减少数据库的访问,可以使用缓存数据库如memcache、redis。
4、镜像:
尽量减少下载,可以把不同的请求分发到多个镜像端。
5、负载均衡:
Apache的最大并发连接为1500,只能增加服务器,可以从硬件上着手,如F5服务器。当然硬件的成本比较高,我们往往从软件方面着手。 

16、 请解释PHP中的Xdebug是什么?
Xdebug是一种PHP扩展,用于调试PHP应用程序和分析性能问题。Xdebug支持调试PHP应用程序,例如在代码中设置断点、查看变量和调用栈等,同时也支持分析PHP应用程序的性能,例如查看函数的调用次数和执行时间
17、 请解释PHP中的PHPUnit是什么
PHPUnit是一种PHP单元测试框架,用于对PHP应用程序进行单元测试和集成测试。PHPUnit提供了一组API和工具,可以对PHP类和方法进行测试,例如检查返回值、异常和断言等,同时也支持测试覆盖率和测试报告等功能。 希望以上PHP高级面试题及其答案对您有所帮助
 18、什么是单元测试?为什么要进行单元测试?

单元测试是一种测试方法,用于测试软件中的最小可测试单元(函数、方法)是否按预期工作。进行单元测试的原因包括:

  • 提供代码质量保证,通过测试代码的不同路径和边界情况,可以发现和修复潜在的bug。
  • 提高代码的可维护性,通过编写测试用例,可以更好地理解和组织代码。
  • 支持重构,当需要对代码进行重构时,可以通过运行单元测试来确保代码的行为没有发生变化。
  • 提高开发效率,通过自动化的单元测试,可以快速检测代码的正确性,减少手动测试的工作量。 以上是另外五个面试题及其答案,希望对你有帮助。如果还有其他问题,请随时提问。

你可能感兴趣的:(面试,php,mysql,php,linux,开发语言)