web服务器脚本安全 基础学习 总结【对应php 脚本】
1 命令注入[windows dos, linux shell]
容易受到注入攻击的php函数
system , exec ,passthru, shell_exec, eval,preg_replace, str_replace ,动态函数, call_user_func.
system :exec passthru shell_exec 执行shell
url 编码与解码 比如 使用上述函数 表单提交 传入参数 执行
2Eval 注入攻击
使用Eval 执行存储在php数据库中的代码 过滤的重要性
另外 :Eval 注入攻击 preg_replace 正则表达式 /e
动态函数调用call_user_func.
3 应用可变变量的注入攻击 foreach ($_GET as$key=>$value){$$key=$value;}
最好不要用可变变量 或者把相关用到的自己初始化的变量 写到下面
防范注入攻击
1 避免给使用相关函数
2 自定义函数或者函数库
3 使用转义参数函数 escapeshellarg(); 或者检查, 过滤参数
4不要直接传函数名称 根据参数执行 函数 或者方法 可以自己if 判断
5 使用apach php服务器的 安全模式 配置
safe_mode=on
设置安全模式路径 safe_mode_exec_dir=/函数命令 路径
客户端脚本植入攻击
防范 strip_tags() 去除脚本标签
htmlspecialchars() 从数据库显示出来的 数据 进行转义 防止被植入的js脚本执行
htmlentities()
4 xss漏洞主要是cookie 攻击 使用htmlspecialchars 转义
echo 显示的 都要转义
5 Sql数据的转义 过滤 避免 sql注入
1. 1’ or ‘1’=’1 这类漏洞:
addslashes 进行单引号转义 或者配置 自动 php.ini magic_quotes_gpc=on
mysql_real_escape_string()
盗取密码 或者可以删整个表数据
相应的函数 转义 整数 浮点等 intval() floatbval() doubleval()
6 CSRF跨网站请求伪造攻击
伪造http请求
判断网页的来源
隐藏变量 eg: 生成随机数 session 保存 操作前 判断
7 会话劫持攻击
定期修改session_id
关闭透明化[可以通过url 隐藏hidden去向服务器传递session_id] session_id 只从cookie获取session_id
//php.ini配置 session.user_trans_sid=0关闭
use_cookies=1 //使用cookie
session.use_only_cookies=1//只使用cookies
检查浏览器是否变化 浏览器信息保存到seesion 判断
8 Http响应拆分攻击 目前不起作用
9文件上传攻击 【文件不可以被执行 危险】
关闭文件上传/php.ini file_upload=off
限制上传文件大小 /php.ini post_max_size upload_max_size
检查是否是真的上传文件 is_upload_file()
检查文件大小 内容类型
filesize() getimagesize() readfile()
隐藏文件的路径
改变临时文件夹 php.ini upload_tmp_dir
远程文件引入攻击
关闭远程调用
Php.ini allow_url
通过url传递简单 远程域名
远程文件的目录穿越检查 if(..)
数据库暴库 web服务器配置目录安全性
另外 阿里的一篇文章 web安全漏洞 写的不错 ,可以去看下。