1、简述常见的 PHP 安全性攻击?
SQL注入、代码注入、XSS攻击、会话固定、会议捕获和劫持、跨站点请求伪造(CSRF)
2、阐述PHP中防SQL注入方法?
(1)采用参数化查询或预处理语句来防止SQL注入
(2)对输入进行过滤和验证
(3)对错误信息进行适当的处理
(4)持续的安全审计和漏洞扫描
3、怎样避免XSS跨站脚本攻击漏洞?
(1)对输出进行HTML实体编码以防止XSS
$output = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
(2)设置合适的HTTP头来防止点击劫持
header("X-Frame-Options: SAMEORIGIN");
header("Content-Security-Policy: default-src 'self'");
(3)使用异步请求来提交敏感数据,如登录信息
(4)使用会话管理和CSRF令牌来防止会话劫持和跨站请求伪造
4、简述 CSRF 攻击 ?
跨站请求伪造攻击,攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求。如果用户在被攻击网站中保存了登录状态,那么攻击者就可以利用这个登录状态,绕过后台的用户验证,冒充用户向服务器执行一些操作
类型:
(1)GET 类型的 CSRF 攻击
(2)POST 类型的 CSRF 攻击
(3)链接类型的 CSRF 攻击,比如在 a 标签的href 属性里构建一个请求,然后诱导用户去点击。
防护:
(1)同源检测,服务器根据 http 请求头中origin 或者referer信息来判断请求是否为允许访问的站点
(2)CSRF Token 进行验证
(3)对 Cookie 进行双重验证
5、简述PHP安全模式 ?
以安全模式运行php,当安全模式打开的时候,以下函数列表的功能将会受到限制
chdir, move_uploaded_file, chgrp, parse_ini_file, chown, rmdir, copy, rename, fopen, require, highlight_file, show_source, include, symlink, link, touch, mkdir, unlink
以下执行命令的函数列表将会受到影响
exec,shell_exec,passthru,system,popen
6、简述如何进行Session劫持的防御 ?
(1)更改Session名称
(2)关闭透明化Session ID
(3)Cookie的HttpOnly为true
(4)关闭所有phpinfo类dump request信息的页面
(5)验证HTTP头部信息
7、简述PHP如何实现过滤用户输入 ?
(1)使用预定义的过滤函数
$input = filter_input(INPUT_GET, 'input', FILTER_SANITIZE_STRING);
- 使用filter_var函数
$input = filter_var($_GET['input'], FILTER_SANITIZE_STRING);
- 使用filter_input_array过滤整个数组
(4)自定义过滤函数
8、简述PHP如何对输出要进行转义 ?
使用转义符号 ''
函数 htmlentities()
9、PHP如何实现表单与数据安全?
(1)强制类型校验
(2)过滤和转义
(3)数据验证
(4)防止重复提交
(5)使用安全的数据库操作
(6)定期更新框架和库
10、如何规避从URL的语义进行攻击 ?
对用户的输入做检测
11、解释如何PHP文件上传漏洞原理以及防御姿势?
(1)文件类型验证不完善:PHP中的$_FILES数组是用于处理文件上传的全局变量。在文件上传过程中,$_FILES变量中包含了文件的大小、类型等信息。然而,黑客可以通过伪造上传请求,将恶意文件伪装成图片或其他允许上传的文件类型。
(2)文件执行权限不当:PHP服务器在保存上传文件时,如果没有正确设置或检查文件的执行权限,黑客可能通过上传恶意文件来执行任意代码。
防御:
设置白名单
文件命名策略:在保存上传文件时,应该采用随机生成的文件名
限制文件大小
检查文件内容
文件权限控制
12、PHP如何防止防止源代码的暴露 ?
(1)使用mod_security过滤输出严防泄漏
(2)不要将关键敏感代码放到根目录中
(3)更改默认的文件类型
(4)绝对禁止访问根目录
13、PHP如何预防文件包含的代码注入攻击 ?
(1)过滤用户输入
(2)使用PDO和预编译语句
(3)禁用危险函数
(4)运行时报错处理,隐藏报错 display_errors 为 off
(5)安装防火墙
- PHP编程如何预防文件目录猜测漏洞?
设置文件路径限制
过滤输入数据
禁用远程文件包含
使用文件类型白名单
使用哈希检查代码完整性
事先定义文件,指定PHP常量或定义文件路径
- PHP安全编程之打开远程文件的风险的解决方案 ?
权限控制
日志追踪
白名单验证
禁用远程文件包含
避免使用动态文件路径
限制包含文件的目录
使用场景特定的包含函数
16、PHP如何防止Shell命令注入 ?
使用PHP内置的escapeshellcmd和escapeshellarg函数,或者手动构建白名单策略
17、PHP如何处理密码嗅探和重播攻击 ?
使用SSL发送身份验证信息
使用强度高的加密算法
对密码进行加盐处理
控制破解尝试次数
定期更换密钥
18、PHP记住登录状态的正确做法 ?
将用户信息保存在用户浏览器中作为 cookie
19、PHP编程主机文件目录浏览安全措施 ?
(1)使用.htaccess文件来禁止浏览目录
Apache里设置:Options -Indexes
- 更改文件和目录的权限
(3)使用.htaccess或httpd.conf来限制特定文件的访问
(4)使用PHP配置来禁止PHP在浏览器中直接运行
20、编写PHP代码实现自定义MD5加强安全性 ?
加盐、MD5哈希值并验证
21、如何实现PHP安全过滤?
使用PHP内置的过滤器:filter_var,filter_input
防止SQL注入攻击
防止XSS攻击
使用安全的Hash算法
22、PHP的线程安全与非线程安全版本的区别 ?
Thread Safe(线程安全)版本php适用在使用ISAPI或者module的web服务器上,如IIS的ISAPI模式或者apache module模式
Non Thread Safe(非线程安全)版本php适用在使用CGI以及fastCGI的web服务器上,如nginx,lighttpd以及IIS的CGI模式
- 简述PHP代码书写的安全措施与规范 ?
遵循标准的PHP语法psr-1和psr-2
使用合适的命名规则
缩进:每级缩进用四个空格,而不是使用制表符
写注释
一个函数或方法完成一个任务
24、简述常用必须的PHP服务端设置规则 ?
25、简述PHP四大安全策略 ?
文件系统安全
数据库安全
用户数据过滤
其他安全策略
26、简述PHP网络爬虫常见的反爬策略 ?
(1)IP限制
(2)验证码识别
(3)频率限制
(4)JavaScript检测
27、简述PHP常用的安全函数作用 ?
28、MySQL如何实现PHP输入安全 ?
输入过滤:HTML转义、去除多余的空格、过滤特殊字符
验证数据:filter_var、验证URL、验证数字is_numeric
数据库安全:使用预处理语句、使用密码哈希
29、简述PHP弱类型安全问题 ?
不同类型的数据在进行比较的时候,会自动进行类型转换。
哈希(Hash)用于将任意长度的输入通过散列算法变换成固定长度的输出,需要使用 hash_equals() 函数来进行比较哈希,hash_equals() 是可以防止时序攻击的一种
当遇到非空字符串与布尔值发生比较时,建议使用三个等号(===)来判断变量值与类型是否完全相等。
30、编写PHP函数实现文件安全下载 ?
完整代码:
31、简述PHP代码审计中容易出问题的点?
安全功能的错误实现:例如使用不安全的函数如 eval(), shell_exec()
跨站脚本攻击(XSS)
注入攻击
不安全的存储
不恰当的错误处理
不安全的会话管理
不安全的文件上传
不安全的重定向
不安全的缓存控制
不安全的CORS实现
版权归原作者 wxjing1 所有, 如有侵权,请联系我们删除。