PHP程序员必须学习的第二课——网站安全问题预防
来源:互联网 发布:学校的电脑网络怎么破 编辑:程序博客网 时间:2024/06/14 07:12
作为PHP程序员,第一课我们学习了基本的语法。那么在熟悉基本语法之后我们应该学些什么呢?我认为是安全问题。安全问题基于一个网站犹如基石,一着不慎,意味着灾难性的事故。
这里主要就提三点最简单,也是最重要的安全问题。以后再做补充。
1. include
有时候,我们可能会根据用户的输入,include 一个文件,比如
include $filename.'php'
那么如果我的$filename 是外部网站的一个连接呢,比如 http://www.hack.com/hack, 无疑会导致安全漏洞。
所以在写这种include 语句的时候我们必须首先判断该文件是否在本地存在。
if (file_exists($filename.'php')) include $filename.'php'
2. xss 注入
xss注入 ,即跨站点脚本注入,指用户在输入中添加类似与<script> alert("I'm hacking")</script>这样的脚本语句。
常见的会被xss攻击的点包括
2.1$_SERVER[‘PHP_SELF']
实例:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">如果用户输入URL 为
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
那么 表单中的内容就会变为:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>然后就会执行后面所加的js 代码。
2.2表单中输入内容添加script 语句
如果在一个填写内容的表单中添加script 语句。如果不做处理,而又在网页上用echo直接输出的话也会在我们的网页中执行,所以对于从表单中的提交的数据,我们也要做一定的处理。
实例:
<form method="post" action="test_form.php"/><input name="text" type="text"/></form>
如果我在输入框中输入<script>alert('hacked')</script> 而如果我们的这个输入框中的内容又会在网页上显示的话,那么该脚本就会被执行。
2.2 处理方法
为了预防这样的攻击,我们可以用php中的一个函数——htmlspecialchars() ,它把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 < 和 > 另外我们还可以1使用
1.(通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
2.(通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\)
3. sql 注入
攻击的主要手法是在表单输入中添加注入sql语句。
如以下登录表单
<form method="post" action="test_form.php"/><input name="id" type="text"/><input name="password" type="password" /></form>
那么sql语句就会变为
select from user where id=name;drop table *;
然后所有数据表都被删除了。因此预防sql注入尤为重要。
处理方法:
php中有专门的函数 mysql_real_escape_string($sql); 它能够转义sql语句中的特殊字符。
对于输入框中提交数据,如果涉及到数据库操作,我们需要用以上函数处理。
实例:
$user = mysql_real_escape_string($user);$pwd = mysql_real_escape_string($pwd);$sql = "SELECT * FROM users WHEREuser='" . $user . "' AND password='" . $pwd . "'"
4. email 注入
这受众面比较窄,只要在你的页面存在发送email操作时预防即可。
实例:
如果用户在正文中输入
someone@example.com%0ACc:person2@example.com%0ABcc:person3@example.com,person3@example.com,anotherperson4@example.com,person5@example.com%0ABTo:person6@example.com信息,那么在发送邮件时这些文本就会被插入到邮件头部,而导致邮件也被发送到这些用户。
<?phpif (isset($_REQUEST['email']))//if "email" is filled out, send email { //send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("someone@example.com", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; }else//if "email" is not filled out, display the form { echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; }?>
function spamcheck($field) { //filter_var() sanitizes the e-mail //address using FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() validates the e-mail //address using FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } }
过滤器功能:
FILTER_SANITIZE_EMAIL 从字符串中删除电子邮件的非法字符
FILTER_VALIDATE_EMAIL 验证电子邮件地址
- PHP程序员必须学习的第二课——网站安全问题预防
- PHP和MySQL数据库经常出现的安全问题及其预防
- 黑马程序员——线程的安全问题
- PHP网站安全问题
- Docker的安全问题以及一些预防方案
- php+mysql网站预防SQL注入的一点小方法
- 黑马程序员——【学习笔记】多线程——多线程的安全问题与解决
- 网站登录安全问题学习
- 所有程序员必须收藏的网站
- 程序员必须关注的网站,持续更新
- 安卓程序员必须知道的网站
- 安卓程序员必须知道的网站
- ASP.NET温故而知新学习系列之网站安全技术—预防脚本攻击(二)
- 黑马程序员——JAVA基础之多线程的安全问题
- 每个程序员半小时内必须解决的5个编程问题——php实现
- PHP 程序员必须收藏的资源大全
- PHP的安全问题
- PHP常见的安全问题
- Android自定义控件系列三:自定义开关按钮(二)
- 关于 mongodb 里 插入数据的命令 save() 和 insert() 的区别
- Java XSD验证XML的方法总结
- 解决ADT Eclipse项目的Preference中,Java Compiler下没有Annotation Processing
- HardCore 的《黑客与画家》
- PHP程序员必须学习的第二课——网站安全问题预防
- Mac 下 Chrome 快捷键大全
- 穷举法解决问题(1,2)
- 钱文忠解读百家姓
- 中间件thirft的Linux部署与运用
- sql通过游标遍历某个数据库中所有的表,按某种需求筛选出对应的记录
- quick-cocos2d-x游戏开发——StateMachine状态机
- 函数参数问题
- 关于大量短链的内核参数优化