PHP 编码安全

php中文网
发布: 2016-06-23 14:31:43
原创
1228人浏览过

这几天由于一个安全度较高的项目需要启动   所以我也就把大部分精力放到了编码安全上面。也了解了一些php编码方面的安全漏洞。比如xss攻击和sql注入等。由于本人资历尚浅,不能尝试编写出攻击类代码,本篇文章只记录本人近几天通过学习php安全编码方面的一些知识来防止和降低被攻击的危险。

1.关于XSS攻击

首先我们先看一段PHP代码:

              <p class="sycode">              <    form action    =    "    <?php echo     $_SERVER    ['PHP_SELF']; ?>    "    >        <    input type    =    "    submit    "     name    =    "    submit    "     value    =    "    submit    "         />        </    form    >              </p>
登录后复制

目的是提交到当前页面。当我们输入http://localhost/xss/index.php的时候。页面正常的提交了。这就是我们想要的结果。

但是http://localhost/xss/index.php?a=1的时候浏览器也正常提交了。这样可就不是我们想要的了。当我们在浏览器中输入http://localhost/xss/index.php/%3E%22%3E%3Cscript%3Ealert%28%27xss%27%29%3C/script%3E

立即学习PHP免费学习笔记(深入)”;

看看会发生什么事吧。没错浏览器弹出了XSS的提示框。这就表明网站存在被XSS攻击的危险了。

那么我们怎样解决这一问题呢 ,下面请看如下代码:

 

              <p class="sycode">              <    form action    =    "    <?php echo htmlspecialchars(    $_SERVER    ['PHP_SELF']); ?>    "    >        <    input type    =    "    submit    "     name    =    "    submit    "     value    =    "    submit    "         />        </    form    >              </p>
登录后复制


现在再次提交上面的恶意代码,这样我们是不是就避免了被攻击了呢。

htmlspecialchars 函数把一些预定义的字符转换为 HTML 实体。

2.关于SQL注入

下面先看一个例子(这个例子只是起到说明作用,无实际效果):

              <p class="sycode">              $name         =         $_GET    [    '    username    '    ];    mysql_query    (“SELECT     *     FROM users WHERE name    =    ’{    $name    }’”);              </p>
登录后复制


当我们在浏览器输入http://localhost/xss/index.php?username=confusing,的时候,正常进入了SQL的SELECT语句。这是我们想要的结果。

可是当我们在浏览器中输入:http://localhost/xss/index.php?username=confusing';DELETE FROM users;

腾讯云AI代码助手
腾讯云AI代码助手

基于混元代码大模型的AI辅助编码工具

腾讯云AI代码助手 98
查看详情 腾讯云AI代码助手

这条SQL语句就变成了:

              <p class="sycode">              SELECT         *         FROM     users     WHERE     name    =    '    confusing    '    ;    DELETE         FROM     users;              </p>
登录后复制

多么可怕的事情。这条语句把users表删除掉了。

那么我们怎样防止这样的事情发生呢?

1).验证输入

看下面的代码片段:

              <p class="sycode">              if (get_magic_quotes_gpc()) {              </p>              <p class="sycode">                $name = stripslashes($name);              </p>                    <p class="sycode">              $name         =         mysql_real_escape_string    ($_GET['username'];    );    mysql_query    (“SELECT     *     FROM users WHERE name    =    ’{    $name    }’”);              </p>
登录后复制

这样是不是更安全了一些呢。

还有一些比较好的PHP函数库比如我上篇提到的Ctype。都是一些验证很好的验证数据的工具。只要我们不耐其烦的认真检验用户输入的数据就能最大限度的减少被攻击的几率。

今天只写这么多,本人也在学习中。如发现更多会在本处直接更新。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号