存档

2008年1月 的存档

XSS攻击简介

2008年1月24日

XSS(Cross Site Script)跨站脚本攻击。是指攻击者向被攻击Web 页面里插入恶意html代码,当用户浏览该页之时,嵌入其中的HTML代码会被执行,从而达到攻击的特殊目的。XSS和CSRF(Cross site request forgery)合称Web 杀手组合。XSS攻击的危害有:
1、盗取各类用户帐号,如机器登录帐号、网银帐号、各类管理员帐号
2、控制企业信息,包括读取、篡改、增删企业敏感数据的能力
3、非法转账和网站挂马
4、控制受害者机器(俗称肉鸡),通常是向其它网站发起攻击或强制发送电子邮件等

攻击Yahoo Mail 的Yamanner 蠕虫是一个著名的XSS 攻击实例。早期Yahoo Mail 系统有一个漏洞,当用户在web 界面查收邮件时有可能执行到信件内的javascript 代码。利用这个漏洞, XSS攻击者让用户运行了含有病毒的js代码。并且Yahoo Mail 系统使用了Ajax技术,这样病毒javascript 可以的向Yahoo Mail 系统发起ajax 请求,从而得到用户的地址簿,并发送病毒给他人。

常见XSS 攻击手法按攻击来源分为两类:一类是来自内部的攻击,这一类攻击手法类似于SQL Injection, 利用WEB程序没有对用户输入作充分的检查和过滤.攻击者通过提交特殊的字符串使得XSS跨站页面直接存在于被攻击站点上,这个字符串被称为XSS跨站语 句。Yamanner 就是XSS内部攻击的一例。

另一类则是来来自外部的攻击,主要指的自己构造XSS 跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个跨站网页放在自己的服务器上,然后通过结合其它技术,如 社会工程学等,欺骗目标服务器的管理员打开。这一类攻击的威胁相对较低,至少ajax 要发起跨站调用是非常困难的。

XSS漏洞按照攻击利用手法的不同,有以下三种类型:

类型A,本地利用漏洞存在于页面中客户端脚本自身。其攻击过程如下:

Alice给Bob发送一个恶意构造了Web的URL。

Bob点击并查看了这个URL。

恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在Bob电脑上。

具有漏洞的HTML页面包含了在Bob电脑本地域执行的JavaScript。

Alice的恶意脚本可以在Bob的电脑上执行Bob所持有的权限下的命令。

类型B,反射式漏洞反射式XSS漏洞和类型A有些类似,不同的是Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。其攻击过程如下:

Alice经常浏览某个网站,此网站为Bob所拥有。Bob的站点运行Alice使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息)。

Charly发现Bob的站点包含反射性的XSS漏洞。

Charly编写一个利用漏洞的URL,并将其冒充为来自Bob的邮件发送给Alice。

Alice在登录到Bob的站点后,浏览Charly提供的URL。

嵌入到URL中的恶意脚本在Alice的浏览器中执行,就像它直接来自Bob的服务器一样。此脚本盗窃敏感信息(授权、信用卡、帐号信息等)然后在Alice完全不知情的情况下将这些信息发送到Charly的Web站点。

类型C,存储式漏洞,该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。其攻击过程如下:

Bob拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。

Charly注意到Bob的站点具有类型C的XXS漏洞。

Charly发布一个热点信息,吸引其它用户纷纷阅读。

Bob或者是任何的其他人如Alice浏览该信息,其会话cookies或者其它信息将被Charly盗走。

VN:F [1.9.22_1171]
Rating: 6.0/10 (3 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

程序开发

PHP中文截字、断字2个函数介绍

2008年1月4日

在写页面的时候常会遇到 30 个字要截字, 超过 30 字加 “…”, 未满 30 字不加.. 等等问题. 之前用 substr 的写法如下:

1
2
3
$string = strip_tags($string); // 先清掉 html tag, 以免 html tag 被破坏
$string = mb_substr($string, 0, 80, 'UTF-8');
$string .= (mb_strlen($string, 'UTF-8') > 80)?'...':'';

PHP 有很方便的函数mb_strimwidth可以直接达到此功能.

$string = strip_tags($string);
$string = mb_strimwidth($string, 0, 80, '...', 'UTF-8');

在UTF-8 情况下算字长用 strlen 或 mb_strlen 都不是很准确, 所以可以用另一个方法mb_strwidth, 算字的宽度:

echo mb_strwidth($string, 'UTF-8'); // 算字长

现在我们回过来看mb_strimwidth的解决方法,如果最后被截断的是2个空格,那么格式就会变得很丑陋,这是我们可以用以下方法:

rtrim(mb_strimwidth($string, 0, 24))."..."

今天看了一篇不错的文章:用Tidy库处理用户输入的中文http://nukq.malmam.com/archives/14

VN:F [1.9.22_1171]
Rating: 6.5/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

程序开发

Linux下的Vim设定

2008年1月4日

以下这段可以使用中文:

if has("multi_byte")
set encoding=utf-8
"set fileencoding=chinese
set fileencodings=ucs-bom,utf-8,chinese
endif
set tabstop=4
set shiftwidth=4
set smarttab
set smartindent
set ruler
colorscheme vividchalk
syntax on
set number
set guifont=Monaco 12
if has("win32")
    "set guifont=Courier_New:h10:cANSI    
    set guifont=mingliu:h12
endif

开发人员字体下载

推荐Return of Monaco.ttf,Debian下

  1. cp monaco.ttf /usr/share/fonts/truetype/
  2. fc-cache -f -v

Debian下也可以用这款字体:ttf-inconsolata: an open font for your terminal and for nice code printouts

Vim的Color Scheme

如果你是系统管理员,可以将下载的颜色放入/usr/share/vim/vim70/colors/目录下,卡耐基梅隆大学的网站上有一张VimColorSchemeTest,方案十分多,一定会有中意的。我用的是vividchalk. 如果你不是系统管理员,可以将color scheme文件放在~/.vim/colors/下。

我使用的终端程序是secureCRT,终端默认不显示彩色,因此还需要作如下设定:点击”会话选项”–”仿真”–终端选择”Linux”–并且勾选ANSI,如果还不能显示vim的颜色就先exit再登陆就OK了!

如果设置完后,发现功能没有起作用,检查一下系统下是否安装了vim-enhanced包,查询命令为:
  $rpm –q vim-enhanced

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

系统管理