- 浏览: 5127910 次
- 性别:
- 来自: 天津
博客专栏
-
实战 Groovy
浏览量:28974
文章分类
- 全部博客 (639)
- 代码之谜 (6)
- JavaScript quirks (5)
- 程序员 (92)
- Java (93)
- BT编程 (7)
- html/css (64)
- Groovy&Grails (42)
- Android (20)
- C/C++ (5)
- PHP/Perl/Python (46)
- 经典文章 (51)
- CodeIgniter (14)
- JQuery (10)
- 笑话 (4)
- 其他 (32)
- javascript (69)
- 云计算 (0)
- html5 (7)
- 面试 (8)
- google (3)
- nosql (2)
- nodejs (11)
- go (5)
- erlang (1)
- 小常识 (3)
- 冷知识 (5)
- database (4)
- web (12)
- 架构 (12)
- Exception (0)
最新评论
-
jqw1992:
https://www.chromefor.com/libra ...
[福利] 开发者必备的 Chrome 插件——ChromeSnifferPlus -
litjerk:
初步算了一下,目前最最精简的Win98版是5M,他5个小时多敲 ...
让人目瞪口呆的三位世界级电脑大师 -
379855529:
。。似乎重点没说NIO啊,前面基础只是铺垫的很好的,可是我要的 ...
Java NIO与IO的详细区别(通俗篇) -
springmvc_springjpa:
spring mvc demo教程源代码下载,地址:http: ...
一步步开发 Spring MVC 应用 -
匡建武:
Good
四个程序员的一天
了解常见的PHP应用程序安全威胁,可以确保你的PHP应用程序不受攻击。因此,本文将列出 6个常见的 PHP 安全性攻击,欢迎大家来阅读和学习。
1、SQL注入
SQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。还有一种是通过system()或exec()命令注入的,它具有相同的SQL注入机制,但只针对shell命令。01 |
$username = $_POST [ 'username' ];
|
02 |
$query = "select * from auth where username = '" . $username . "'" ;
|
03 |
echo $query ;
|
04 |
$db = new mysqli( 'localhost' , 'demo' , ‘demo ', ‘demodemo' );
|
05 |
$result = $db ->query( $query );
|
06 |
if ( $result && $result ->num_rows) {
|
07 |
echo "<br />Logged in successfully" ;
|
08 |
} else {
|
09 |
echo "<br />Login failed" ;
|
10 |
} |
上面的代码,在第一行没有过滤或转义用户输入的值($_POST['username'])。因此查询可能会失败,甚至会损坏数据库,这要看$username是否包含变换你的SQL语句到别的东西上。
防止SQL注入
选项:
- 使用mysql_real_escape_string()过滤数据
- 手动检查每一数据是否为正确的数据类型
- 使用预处理语句并绑定变量
使用准备好的预处理语句
- 分离数据和SQL逻辑
- 预处理语句将自动过滤(如:转义)
- 把它作为一个编码规范,可以帮助团队里的新人避免遇到以上问题
01 |
$query = 'select name, district from city where countrycode=?' ;
|
02 |
if ( $stmt = $db ->prepare( $query ) )
|
03 |
{ |
04 |
$countrycode = 'hk' ;
|
05 |
$stmt ->bind_param( "s" , $countrycode );
|
06 |
$stmt ->execute();
|
07 |
$stmt ->bind_result( $name , $district );
|
08 |
while ( $stmt ( $stmt ->fetch() ){
|
09 |
echo $name . ', ' . $district ;
|
10 |
echo '<br />' ;
|
11 |
}
|
12 |
$stmt ->close();
|
13 |
} |
2、XSS攻击
XSS(跨站点脚本攻击)是一种攻击,由用户输入一些数据到你的网站,其中包括客户端脚本(通常JavaScript)。如果你没有过滤就输出数据到另一个web页面,这个脚本将被执行。接收用户提交的文本内容
01 |
<?php |
02 |
if ( file_exists ( 'comments' )) {
|
03 |
$comments = get_saved_contents_from_file( 'comments' );
|
04 |
} else {
|
05 |
$comments = '' ;
|
06 |
} |
07 |
08 |
if (isset( $_POST [ 'comment' ])) {
|
09 |
$comments .= '<br />' . $_POST [ 'comment' ];
|
10 |
save_contents_to_file( 'comments' , $comments );
|
11 |
} |
12 |
> |
输出内容给(另一个)用户
1 |
<form action= 'xss.php' method= 'POST' >
|
2 |
Enter your comments here: <br /> |
3 |
<textarea name= 'comment' ></textarea> <br />
|
4 |
<input type= 'submit' value= 'Post comment' />
|
5 |
</form><hr /><br /> |
6 |
7 |
<?php echo $comments ; ?>
|
将会发生什么事?
- 烦人的弹窗
- 刷新或重定向
- 损坏网页或表单
- 窃取cookie
- AJAX(XMLHttpRequest)
防止XSS攻击
为了防止XSS攻击,使用PHP的htmlentities()函数过滤再输出到浏览器。htmlentities()的基本用法很简单,但也有许多高级的控制,请参阅 XSS速查表。
3、会话固定
会话安全,假设一个PHPSESSID很难猜测。然而,PHP可以接受一个会话ID通过一个Cookie或者URL。因此,欺骗一个受害者可以使用一个特定的(或其他的)会话ID 或者钓鱼攻击。4、会议捕获和劫持
这是与会话固定有着同样的想法,然而,它涉及窃取会话ID。如果会话ID存储在Cookie中,攻击者可以通过XSS和JavaScript窃取。如果会话ID包含在URL上,也可以通过嗅探或者从代理服务器那获得。防止会话捕获和劫持
- 更新ID
- 如果使用会话,请确保用户使用SSL
5、跨站点请求伪造(CSRF)
CSRF攻击,是指一个页面发出的请求,看起来就像是网站的信任用户,但不是故意的。它有许多的变体,比如下面的例子:1 |
< img src = 'http://example.com/single_click_to_buy.php?user_id=123&item=12345' >
|
防止跨站点请求伪造
一般来说,确保用户来自你的表单,并且匹配每一个你发送出去的表单。有两点一定要记住:
- 对用户会话采用适当的安全措施,例如:给每一个会话更新id和用户使用SSL。
- 生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交时检查它。
6、代码注入
代码注入是利用计算机漏洞通过处理无效数据造成的。问题出在,当你不小心执行任意代码,通常通过文件包含。写得很糟糕的代码可以允许一个远程文件包含并执行。如许多PHP函数,如require可以包含URL或文件名,例如:01 |
<form>Choose theme: |
02 |
<select name = theme>
|
03 |
<option value = blue>Blue</option>
|
04 |
<option value = green>Green</option>
|
05 |
<option value = red>Red</option>
|
06 |
</select>
|
07 |
<input type = submit>
|
08 |
</form> |
09 |
<?php |
10 |
if ( $theme ) {
|
11 |
require ( $theme . '.txt' );
|
12 |
}
|
13 |
?> |
在上面的例子中,通过传递用户输入的一个文件名或文件名的一部分,来包含以"http://"开头的文件。
防止代码注入
- 过滤用户输入
- 在php.ini中设置禁用allow_url_fopen和allow_url_include。这将禁用require/include/fopen的远程文件。
其他的一般原则
1. 不要依赖服务器配置来保护你的应用,特别是当你的web服务器/ PHP是由你的ISP管理,或者当你的网站可能迁移/部署到别处,未来再从别处迁移/部署在到其他地方。请在网站代码中嵌入带有安全意识的检查/逻辑(HTML、JavaScript、PHP,等等)。
2. 设计服务器端的安全脚本:
—例如,使用单行执行 - 单点身份验证和数据清理
—例如,在所有的安全敏感页面嵌入一个PHP函数/文件,用来处理所有登录/安全性逻辑检查
3. 确保你的代码更新,并打上最新补丁。
发表评论
-
PHP 最佳实践(译)——PHP 容易混淆技术的实用指南
2013-06-09 11:11 3912在网上看到一篇文章,PHP Best Practices- ... -
「译」在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢?
2013-03-12 09:11 3243问题 众所周知,在 python 中,+ 运算 ... -
python: extend (扩展) 与 append (追加) 的差别
2013-03-12 08:59 46937>>> li = ['a', 'b' ... -
web.py 0.3 新手指南 - 多数据库使用
2013-01-26 08:11 1561问题 如何在单独项目中应用多数据库? 解决办法 we ... -
web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
2013-01-26 08:11 5314问题: 您要执行的SQL语句如:高级的联接或计数。 解 ... -
web.py 0.3 新手指南 - RESTful doctesting using app.request
2013-01-26 08:11 2510!/usr/bin/env python "& ... -
web.py 0.3 新手指南 - 实时语言切换
2013-01-26 08:11 1831实时语言切换 问题: 如何实现实时语言切换? 解法: ... -
web.py 0.3 新手指南 - db.select 查询
2013-01-25 12:38 3890问题: 怎样执行数据库查询? 解决方案: 如果是0. ... -
web.py 0.3 新手指南 - 发送邮件
2013-01-25 12:38 1651问题 在web.py中,如何发送邮件? 解法 在 ... -
web.py 0.3 新手指南 - 如何用Gmail发送邮件
2013-01-25 12:38 3241问题 如何用Gmail发送邮件? 解法 安装和维护邮 ... -
web.py 0.3 新手指南 - 在template中使用session
2013-01-25 12:37 1421问题: 我想在模板中使用session(比如:读取并显示 ... -
web.py 0.3 新手指南 - 在调试模式下使用session
2013-01-25 12:37 1378问题 如何在调试模式下使用session? 解法 ... -
web.py 0.3 新手指南 - Sessions
2013-01-24 12:42 2191问题 如何在web.py中使用session 解法 注 ... -
web.py 0.3 新手指南 - 在子应用下使用session
2013-01-24 12:42 1681提示 这个解决方案是 ... -
web.py 0.3 新手指南 - 模板系统
2013-01-24 12:40 5855Introduction web.py 的模板语言叫做 T ... -
web.py 0.3 新手指南 - 安装
2013-01-24 12:40 3611Summary 安装 开发 产品 Light ... -
web.py 0.3 新手指南 - FAQ
2013-01-24 12:39 2077如何使用template.py模 ... -
自己动手设计 PHP MVC 框架(一)——URL
2012-10-29 10:57 11772在框架盛行的今天,MVC 也不再是神话。 经常听到很多程序员 ... -
在PHP框架中需要使用smarty模板吗?
2012-09-03 15:29 3722在 java 开发中使用模板已经习以为常了,很多人讨厌 jav ... -
21非常有用的htaccess的方法与技巧
2012-08-21 09:48 4565Apache Web服务器有一个伟大的方式来处理信息,使 ...
相关推荐
不是固若金汤,随着PHP的广泛运用,一些黑客们也在无时不想找PHP的麻烦,通过PHP程序...在节,我们将从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性。
在节,我们将从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性。 如何通过全局变量进行攻击? PHP中的变量不需要事先声明,它们会在第一次使用时自动...
Ofstar和phpind论坛安全性分析 Ofstar论坛安全性分析 osCommerce SQL Injection && DoS && Cross Site PHP Networking PHP Security, Part 3 PHP Session Management With Cookies PHP 安全(1) PHP 安全(2) PHP...
针对SQL注入隐蔽性极强的特点,本书重点讲解了SQL注入的排查方法和可以借助的工具,总结了常见的利用SQL漏洞的方法。另外,本书还专门从代码层和系统层的角度介绍了避免SQL注入的各种策略和需要考虑的问题。 本书...
在节,我们将从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性。 如何通过全局变量进行攻击? PHP中的变量不需要事先声明,它们会在第一次使用时自动...
大家都知道安全性是重要的,但是行业中的趋势是直到最后一刻才添加安全性。既然不可能完全保护 Web 应用程序,那么为什么要费这个劲儿呢,不是吗?不对。只需采用一些简单的步骤就能够大大提高 PHP Web 应用...
浅谈Php安全和防Sql注入,防止Xss攻击,防盗链,防CSRF 前言: 首先,笔者不是web安全的专家,所以这不是web安全方面专家级文章,而是学习笔记、细心总结文章,里面有些是我们phper不易发现或者说不重视的东西。所以...
XSS又称CSS,全称Cross SiteScript(跨站脚本攻击), XSS攻击类似于SQL注入攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入...
16.5 Web服务器和PHP的安全性 16.5.1 保持软件的更新 16.5.2 查看php.ini文件 16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 16.6.3...
16.5 Web服务器和PHP的安全性 16.5.1 保持软件的更新 16.5.2 查看php.ini文件 16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 ...
3. **安全性高**:系统对用户输入进行严格验证和过滤,有效防止SQL注入等常见攻击手段,确保数据安全。 4. **扩展性强**:系统预留了接口和插件机制,方便开发者根据实际需求进行扩展和定制。 5. **界面美观**:采用...
16.5 Web服务器和PHP的安全性 16.5.1 保持软件的更新 16.5.2 查看php.ini文件 16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 16.6.3...
1. 安全性高:系统内置多重安全机制,有效防止SQL注入、跨站脚本等常见攻击,确保网站数据安全。 2. 易于维护:系统采用前后端分离技术,方便开发者进行二次开发和定制,同时提供详细的文档和教程,降低维护成本。 3...
针对SQL注入隐蔽性极强的特点,本书重点讲解了SQL注入的排查方法和可以借助的工具,总结了常见的利用SQL漏洞的方法。另外,本书还专门从代码层和系统层的角度介绍了避免SQL注入的各种策略和需要考虑的问题。 本书...
网盾服务器安全加固工具是一款鉴于日益严峻的服务器安全问题,武汉网盾科技有限公司千方百计为客户着想,推出的服务器安全加固工具。省去了顾客服务器安全配置的烦恼。 软件全部免费使用,网盾服务器安全加固...
主要内容包括:去除应用程序安全漏洞,防御PHP攻击,提高运行PHP代码的服务器安全,实施严格的身份验证以及加密应用程序,预防跨站点脚本攻击,系统化测试应用程序安全性,解决第三方应用程序已有漏洞等。...
6.禁用系统TCP空链接和默认共享磁盘和文件(推荐) 五.其他安全选项 1.执行禁止PHPddos法包策略(IPsec策略) 2.执行系统危险程序安全权限设置(推荐) 3.执行系统危险文件夹安全权限设置(推荐) ...
1.3.1 第一个PHP程序Hello, world 6 1.3.2 学习PHP应该准备哪些软件 8 1.3.3 相关知识领域的介绍 9 1.4 程序运行环境的搭建 10 1.4.1 Apache简介 10 1.4.2 安装Apache与PHP 10 1.4.3 使用phpinfo()确认Apache与PHP ...
Web应用程序(DVWA)是一个很容易受到攻击的PHP / MySQL Web应用程序。其主要目标是帮助安全专业人员在法律环境中测试他们的技能和工具,帮助Web开发人员更好地了解保护Web应用程序的过程,并帮助学生和教师了解受控...