web安全普及(1)-XSS与CSRF攻击的原理和演示
数据安全是任何一款软件设计都中都需要考虑的问题。从技术层面讲,数据安全就是保护你存储和使用的数据不被窃听、盗取和破坏,这可能是有外部因素造成的,比如由于过滤不严格造成的SQL注入漏洞,提升脚本执行权限等,也有可能是有代码内部的设计造成的,如死循环,低效率的语句造成的服务器性能下降以致影响访问。社会学意义上的数据安全则更广泛。比如,在一个在线购物商城的设计中,由于设计者错误地使用了自增ID做为商品的单据流水号,竞争对手或有心人很容易地就能分析出这个商城的每日销售量,进而估算出销售额,利润等商业机密数据。纵然,在这个层次上的安全没有很明显的破坏力,但是仍然值得注意。
在程序中要保证数据的安全,除了要保证代码内部的可靠外,最主要的就是严格处理外部数据,即“一切输入输出都是不可靠的”,这就要求我们做好数据过滤和验证。
在php的编程中,最简单的过滤机制就是转义,即对用户的输入和输出进行转义和过滤。为什么需要进行这步处理呢。很多人都这样告诉我们,一定要注意过滤数据,注意转义,否则网站是不安全的。可是他们却没有告诉我们为什么要这么做,到底怎么个不安全,能不能让我直观地看到不安全在什么地方?现在我们就来看两个例子。下面是一个简单的留言本的例子。

在程序中,没有任何的输入输出过滤,当我如图输入上面的数据时,得到了如下的页面:

很显然,由于我们的输入含有CSS代码和JAVASCIPRT代码,但是没有对其进行处理,所以原样输出,导致页面被篡改。这就是我们常听到的“XSS”攻击。
不过滤数据,还会造成SQL语句报错,数据库被注入等,所以数据的过滤是必须要重点考虑的。
我们再来看看,不过滤数据还会带来什么后果。下面是一个超市管理系统的一个功能模块,管理员登陆后,点击可以删除商品。

当然,我们在后台有权限控制,只有管理员登陆才能删除商品,但是这样真的就足够安全吗?我们试一下,我们以一个普通会员的身份提交此删除链接。

嗯,被权限管理系统拦截,可是这是难不住攻击者的,攻击者在前端页面输入下面的恶意代码

用户在订货页面输入了一段html代码,其图片地址指向的就是删除链接。攻击者想干什么?现在我们还不清楚。管理员登陆后台,查看会员的订货单。

备注栏成了图片了,然而图片地址不是真的地址,而是一段删除商品的链接,其在数据库中的真实数据是“<img src=cg.php?ac=menu&do=delcp&todel=149&pages=13 >”。管理员玩玩没有想到,下面的一幕在偷偷上演:

是的,这个“图片”地址被请求了,这就意味着这个删除链接得到了执行。此时管理员仍然是不知不觉,只是当他打开清单管理时,傻眼了,

M01号商品,真的被不知不觉地删除了!这是为什么呢?原来用户本来是没有删除商品权限的,但是用户通过“借刀杀人”,盗用了管理员的权限,执行了这一操作。管理员权限是无限大的,如果用户输入的一个后台清空所有数据的链接呢?后果不堪设想!这就是传说中的跨站cookies攻击,曾经不少网站遭其毒手。怎么防止这种攻击,第一当然是不让用户轻易猜到后台管理链接,第二就是转义,过滤用户数据。
现在我们应该能清楚地了解到不进行数据过滤的恶果了吧。
针对上面的情况,我们只需在接收数据时,使用htmlspecialchars函数,把代码中的特殊字符转为HTML实体,这样在输出的时候,就不会使页面受影响。这些特殊字符主要是“"”,“'”,“&”,“<”,“>”。比如把“<script>alert(1);</script>”转为“<script>alert(1);</script>”,这样就可以阻止这类攻击了。
无需多言,知道了攻,才能更好的受。第一篇到此结束。更多内容,请关注白菜版《php指南》.
在程序中要保证数据的安全,除了要保证代码内部的可靠外,最主要的就是严格处理外部数据,即“一切输入输出都是不可靠的”,这就要求我们做好数据过滤和验证。
在php的编程中,最简单的过滤机制就是转义,即对用户的输入和输出进行转义和过滤。为什么需要进行这步处理呢。很多人都这样告诉我们,一定要注意过滤数据,注意转义,否则网站是不安全的。可是他们却没有告诉我们为什么要这么做,到底怎么个不安全,能不能让我直观地看到不安全在什么地方?现在我们就来看两个例子。下面是一个简单的留言本的例子。

在程序中,没有任何的输入输出过滤,当我如图输入上面的数据时,得到了如下的页面:

很显然,由于我们的输入含有CSS代码和JAVASCIPRT代码,但是没有对其进行处理,所以原样输出,导致页面被篡改。这就是我们常听到的“XSS”攻击。
不过滤数据,还会造成SQL语句报错,数据库被注入等,所以数据的过滤是必须要重点考虑的。
我们再来看看,不过滤数据还会带来什么后果。下面是一个超市管理系统的一个功能模块,管理员登陆后,点击可以删除商品。

当然,我们在后台有权限控制,只有管理员登陆才能删除商品,但是这样真的就足够安全吗?我们试一下,我们以一个普通会员的身份提交此删除链接。

嗯,被权限管理系统拦截,可是这是难不住攻击者的,攻击者在前端页面输入下面的恶意代码

用户在订货页面输入了一段html代码,其图片地址指向的就是删除链接。攻击者想干什么?现在我们还不清楚。管理员登陆后台,查看会员的订货单。

备注栏成了图片了,然而图片地址不是真的地址,而是一段删除商品的链接,其在数据库中的真实数据是“<img src=cg.php?ac=menu&do=delcp&todel=149&pages=13 >”。管理员玩玩没有想到,下面的一幕在偷偷上演:

是的,这个“图片”地址被请求了,这就意味着这个删除链接得到了执行。此时管理员仍然是不知不觉,只是当他打开清单管理时,傻眼了,

M01号商品,真的被不知不觉地删除了!这是为什么呢?原来用户本来是没有删除商品权限的,但是用户通过“借刀杀人”,盗用了管理员的权限,执行了这一操作。管理员权限是无限大的,如果用户输入的一个后台清空所有数据的链接呢?后果不堪设想!这就是传说中的跨站cookies攻击,曾经不少网站遭其毒手。怎么防止这种攻击,第一当然是不让用户轻易猜到后台管理链接,第二就是转义,过滤用户数据。
现在我们应该能清楚地了解到不进行数据过滤的恶果了吧。
针对上面的情况,我们只需在接收数据时,使用htmlspecialchars函数,把代码中的特殊字符转为HTML实体,这样在输出的时候,就不会使页面受影响。这些特殊字符主要是“"”,“'”,“&”,“<”,“>”。比如把“<script>alert(1);</script>”转为“<script>alert(1);</script>”,这样就可以阻止这类攻击了。
无需多言,知道了攻,才能更好的受。第一篇到此结束。更多内容,请关注白菜版《php指南》.