A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huawei 黑马粉丝团   /  2016-10-7 15:53  /  9189 人查看  /  56 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 huawei 于 2017-3-5 10:59 编辑

PHPer必知:6个常见的PHP安全性攻击!

了解常见的PHP应用程序安全威胁,可以确保你的PHP应用程序不受攻击。因此,本文将列出 6个常见的 PHP 安全性攻。

1、SQL注入

       SQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。

      上面的代码,在第一行没有过滤或转义用户输入的值($_POST['username'])。因此查询可能会失败,甚至会损坏数据库,这要看$username是否包含变换你的SQL语句到别的东西上。

防止SQL注入选项:
1),使用mysql_real_escape_string()过滤数据
2),手动检查每一数据是否为正确的数据类型
3),使用预处理语句并绑定变量
4),使用准备好的预处理语句
5),分离数据和SQL逻辑
6),预处理语句将自动过滤(如:转义)
7),把它作为一个编码规范,可以帮助团队里的新人避免遇到以上问题


2、XSS攻击

       XSS(Cross Site Scripting:跨站脚本)是一种攻击,由用户输入一些数据到你的网站,其中包括客户端脚本(通常JavaScript)。如果你没有过滤就输出数据到另一个web页面,这个脚本将被执行。

        接收用户提交的文本内容


输出内容给(另一个)用户
<form action='xss.php' method='POST'>
Enter your comments here: <br />
<textarea name='comment'></textarea> <br />
<input type='submit' value='Post comment' />
</form><hr /><br />

<?php echo $comments; ?>
将会发生什么事?
烦人的弹窗,刷新或重定向,损坏网页或表单,窃取cookie,AJAX(XMLHttpRequest)

防止XSS攻击
为了防止XSS攻击,使用PHP的htmlentities()函数过滤再输出到浏览器。htmlentities()的基本用法很简单,具体可查看下手册。

3、会话固定

       会话安全,假设一个PHPSESSID很难猜测。然而,PHP可以接受一个会话ID通过一个Cookie或者URL。因此,欺骗一个受害者可以使用一个特定的(或其他的)会话ID 或者钓鱼攻击。


4、会议捕获和劫持

       这是与会话固定有着同样的想法,然而,它涉及窃取会话ID。如果会话ID存储在Cookie中,攻击者可以通过XSS和JavaScript窃取。如果会话ID包含在URL上,也可以通过嗅探或者从代理服务器那获得。

防止会话捕获和劫持
1),更新ID
2),如果使用会话,请确保用户使用SSL

5、跨站点请求伪造(CSRF)

         CSRF攻击,是指一个页面发出的请求,看起来就像是网站的信任用户,但不是故意的。它有许多的变体,比如下面的例子
<img src='http://itcast.cn/want_buy_food.php?user_id=12345&item=12345'>
防止跨站点请求伪造
一般来说,确保用户来自你的表单,并且匹配每一个你发送出去的表单。有两点一定要记住:
1),对用户会话采用适当的安全措施,例如:给每一个会话更新id和用户使用SSL。
2),生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交时检查它。

6、代码注入

代码注入是利用计算机漏洞通过处理无效数据造成的。问题出在,当你不小心执行任意代码,通常通过文件包含。写得很糟糕的代码可以允许一个远程文件包含并执行。如许多PHP函数,如require可以包含URL或文件名,例如:
<form>
Choose theme:
<select name = theme>
<option value = blue>Blue</option>
<option value = green>Green</option>
<option value = red>Red</option>
</select>
<input type = submit>
</form>
<?php
if($theme) {
         require($theme.'.txt');
}
?>
在上面的例子中,通过传递用户输入的一个文件名或文件名的一部分,来包含以"http://"开头的文件。

防止代码注入
1),过滤用户输入
2),在php.ini中设置禁用allow_url_fopen和allow_url_include。这将禁用require/include/fopen的远程文件。

其他的一般原则:
游客,如果您要查看本帖隐藏内容请回复



56 个回复

倒序浏览
是对   太好了!  
回复 使用道具 举报
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复 使用道具 举报
ewdjfdsdkjsk
回复 使用道具 举报
111111111111
回复 使用道具 举报
PHP安全性攻击
回复 使用道具 举报
ysp110 初级黑马 2016-11-22 11:19:17
7#
这可要得好好学习!
回复 使用道具 举报
打算打算打算打算大撒旦啊
回复 使用道具 举报
回复 使用道具 举报
感谢分享
回复 使用道具 举报
看着不错啊,解除了新职场上
回复 使用道具 举报
谢谢分享 嘻嘻嘻
回复 使用道具 举报
天天学习一点,努力
回复 使用道具 举报
跟着大神打天下
回复 使用道具 举报
PHPer必知:6个常见的PHP安全性攻击
回复 使用道具 举报
666666666666666666666
回复 使用道具 举报
 点赞呢
回复 使用道具 举报
adsfasfdasfsdafdsafdsafdsagqw
回复 使用道具 举报
6666666666666666666666666
回复 使用道具 举报
感谢楼主分享
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马