- 浏览: 5172162 次
- 性别:
- 来自: 天津
博客专栏
-
实战 Groovy
浏览量:29398
文章分类
- 全部博客 (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 4017在网上看到一篇文章,PHP Best Practices- ... -
「译」在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢?
2013-03-12 09:11 3357问题 众所周知,在 python 中,+ 运算 ... -
python: extend (扩展) 与 append (追加) 的差别
2013-03-12 08:59 47120>>> li = ['a', 'b' ... -
web.py 0.3 新手指南 - 多数据库使用
2013-01-26 08:11 1679问题 如何在单独项目中应用多数据库? 解决办法 we ... -
web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
2013-01-26 08:11 5440问题: 您要执行的SQL语句如:高级的联接或计数。 解 ... -
web.py 0.3 新手指南 - RESTful doctesting using app.request
2013-01-26 08:11 2631!/usr/bin/env python "& ... -
web.py 0.3 新手指南 - 实时语言切换
2013-01-26 08:11 1954实时语言切换 问题: 如何实现实时语言切换? 解法: ... -
web.py 0.3 新手指南 - db.select 查询
2013-01-25 12:38 3994问题: 怎样执行数据库查询? 解决方案: 如果是0. ... -
web.py 0.3 新手指南 - 发送邮件
2013-01-25 12:38 1812问题 在web.py中,如何发送邮件? 解法 在 ... -
web.py 0.3 新手指南 - 如何用Gmail发送邮件
2013-01-25 12:38 3468问题 如何用Gmail发送邮件? 解法 安装和维护邮 ... -
web.py 0.3 新手指南 - 在template中使用session
2013-01-25 12:37 1594问题: 我想在模板中使用session(比如:读取并显示 ... -
web.py 0.3 新手指南 - 在调试模式下使用session
2013-01-25 12:37 1500问题 如何在调试模式下使用session? 解法 ... -
web.py 0.3 新手指南 - Sessions
2013-01-24 12:42 2307问题 如何在web.py中使用session 解法 注 ... -
web.py 0.3 新手指南 - 在子应用下使用session
2013-01-24 12:42 1788提示 这个解决方案是 ... -
web.py 0.3 新手指南 - 模板系统
2013-01-24 12:40 5966Introduction web.py 的模板语言叫做 T ... -
web.py 0.3 新手指南 - 安装
2013-01-24 12:40 3735Summary 安装 开发 产品 Light ... -
web.py 0.3 新手指南 - FAQ
2013-01-24 12:39 2196如何使用template.py模 ... -
自己动手设计 PHP MVC 框架(一)——URL
2012-10-29 10:57 11904在框架盛行的今天,MVC 也不再是神话。 经常听到很多程序员 ... -
在PHP框架中需要使用smarty模板吗?
2012-09-03 15:29 3831在 java 开发中使用模板已经习以为常了,很多人讨厌 jav ... -
21非常有用的htaccess的方法与技巧
2012-08-21 09:48 4697Apache Web服务器有一个伟大的方式来处理信息,使 ...
相关推荐
为了提高安全性,PHP提供了一系列配置选项来控制如何处理HTTP请求变量。例如,可以使用`track_vars`配置选项来控制哪些HTTP请求变量会被自动加载到全局数组中。常见的全局数组包括`$_GET`、`$_POST`和`$_COOKIE`等。...
在PHP编程中,确保代码的安全性是至关重要的。PHP是一种广泛应用的开源脚本语言,尤其在Web开发领域,但如果不慎处理,它也可能成为黑客攻击的目标。以下是对"php常见漏洞及编码安全"主题的详细解释,以及如何防范...
本文将基于提供的部分示例代码来深入探讨几种典型的PHP安全漏洞及其攻击方法。 #### 一、SQL注入攻击 SQL注入是一种常见的Web应用程序攻击方式,它通过在应用程序中插入恶意SQL语句来操纵数据库查询结果。在PHP...
Prepared Statements 可以避免 SQL 注入攻击,提高代码的安全性和可靠性。使用 Prepared Statements 可以提高代码的可维护性和可扩展性。 PHP 应用程序中出现的五个常见数据库问题可以通过使用 PEAR DB 模块或 PDO...
### PHP程序常见漏洞攻击分析 #### 一、全局变量攻击 **概述** PHP因其灵活性而广受欢迎,但也正因这种灵活性使得它成为攻击者的目标之一。全局变量是PHP中的一个特性,无需事先声明即可在程序中任何位置使用,这...
这篇文章主要探讨了10个常见的PHP安全问题,并提供了实例代码以供学习和参考。以下是对这些安全问题的详细解析: 1. **SQL注入**:这是最常见的攻击手段之一,攻击者通过构造特殊的输入,使应用程序执行非预期的SQL...
不是固若金汤,随着PHP的广泛运用,一些黑客们也在无时不想找PHP的麻烦,通过PHP程序...在节,我们将从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性。
通过对以上几种常见漏洞的分析可以看出,PHP程序的安全性很大程度上取决于开发者是否能够正确地处理和验证用户输入以及文件操作。为了提高PHP应用程序的安全性,建议采取以下措施: - 对所有来自外部的数据进行严格...
总结起来,PHP中散列密码的安全性涉及多个方面,包括使用安全的散列函数、加盐、以及利用PHP的`password_hash`和`password_verify`函数。开发者应始终保持对最新安全实践的关注,以保护用户的密码免受攻击。在权衡...
然而,如同所有编程语言一样,PHP程序也可能存在各种安全漏洞,这些漏洞可能会被恶意攻击者利用,对网站的安全性构成严重威胁。本资料集“PHP程序常见漏洞分析”旨在深入探讨这些问题,并提供相应的防范措施。 首先...
在互联网应用中,服务器的安全性至关重要,尤其是对于高并发的场景。PHP作为常见的服务器端脚本语言,经常面临各类安全挑战,其中CC(Challenge Collapsar)攻击就是一种典型的DDoS(分布式拒绝服务)攻击方式。本文...
本文将详细介绍PHP中常见的一些安全漏洞,并提供相应的防御措施,以帮助开发者们提高代码的安全性。 首先,最常见的漏洞之一是SQL注入(SQL Injection)。这种攻击方式允许攻击者通过在数据库查询中嵌入恶意SQL代码...
总的来说,提高PHP程序的安全性需要开发者对每个环节都保持警惕,从代码编写到部署维护,都需要采取相应的安全措施。通过理解这些潜在的安全风险,我们可以更好地保护我们的网站和应用程序免受攻击。
"一个PHP安全过滤类库"是专门为开发者设计的工具,旨在帮助他们在处理用户输入数据时防止各种安全威胁。这类库通常包含一系列预定义的函数或类方法,用于对输入数据进行验证、清理和转义,以消除潜在的SQL注入、跨站...
PHP 网站安全加固与防护实践 本文档主要讨论 PHP 网站的安全加固与防护实践,涵盖了多个关键点,旨在提高 PHP 网站的安全...通过遵守这些安全措施,可以提高 PHP 网站的安全性和防护能力,避免常见的安全风险和攻击。
"PHP网站安全策略的研究和设计" PHP 网站安全策略的研究和设计是当前网络安全研究的热点之一。...我们需要从用户层、网络层、系统层三个方面来保证 PHP 网站的安全性,并设计合理的安全策略来防止各种网络攻击。
配置文件中,有三个关键设置对安全性有着直接影响:`safe_mode`、`display_errors`和`magic_quotes_gpc`。 - **safe_mode**:当开启时,增加了执行远程脚本和文件操作的限制,提高了安全性。 - **display_errors**...
PHP 网站设计中存在的信息安全问题、SQL 注入、Or 1=1 与 union 语句入侵、XSS 跨站攻击等常见安全风险,并讨论如何通过合理的编程设计、输入验证、数据加密等措施来提高 PHP 网站设计中的信息安全性。 一、PHP ...
【PHP安全漏洞详解】 PHP(Hypertext Preprocessor)是一种广泛应用的开源服务器端脚本语言,常用于构建动态网页。由于其语法灵活,融合了C、Java和Perl的特点,PHP深受开发者喜爱。然而,PHP的易用性也带来了安全...