文章目录:
JS脚本安全吗
不安全,
一般就是用他做些简单的效果,
这样一来在不知道你后台或者数据结构的情况下发起攻击不容易。
但是如果你用js做数据交互那就十分不安全了!
所以你后台要做好安全验证,防注入工作。
什么是JavaScript注入攻击
每当接受用户输入的内容并重新显示这些内容时,网站就很容易遭受 JavaScript 注入攻击。让我们研究一个容易遭受 JavaScript
注入攻击的具体应用程序。假设已经创建了一个客户反馈网站。客户可以访问网站并输入对产品的反馈信息。当客户提交反馈时,反馈信息重新显示在反馈页面上。
客户反馈网站是一个简单的网站。不幸的是,此网站容易遭受 JavaScript 注入攻击。
假设正在将以下文本输入到客户反馈表单中:
scriptalert(“Boo!”)/script
此文本表示显示警告消息框的 JavaScript 脚本。在某人将此脚本提交到客户反馈表单后,消息 Boo! 会在将来任何人访问客户反馈网站时显示的攻击。您可能还认为别人不会通过 JavaScript 注入攻击搞破坏。
现在,您对 JavaScript 注入攻击的第一反应也许是不理会。您可能认为 JavaScript
注入攻击不过是一种无伤大雅,不幸的是,黑客会通过在网站中注入 JavaScript 进行破坏活动。使用 JavaScript
注入攻击可以执行跨站脚本 (XSS) 攻击。在跨站脚本攻击中,可以窃取保密的用户信息并将信息发送到另一个网站。
例如,黑客可以使用 JavaScript 注入攻击窃取来自其他用户浏览器的 Cookies
值。如果将敏感信息(如密码、信用卡帐号或社会保险号码)保存在浏览器 Cookies 中,那么黑客可以使用 JavaScript
注入攻击窃取这些信息。或者,如果用户将敏感信息输入到页面的表单字段中,而页面受到 JavaScript 攻击的危害,那么黑客可以使用注入的
JavaScript 获取表单数据并将其发送到另一个网站。
请高度重视。认真对待 JavaScript 注入攻击并保护用户的保密信息。在接下来的两部分中,我们将讨论防止 ASP.NET MVC 应用程序受到 JavaScript 注入攻击的两种技术。
方法 1:视图中的 HTML 编码
阻止 JavaScript 注入攻击的一种简单方法是重新在视图中显示数据时,用 HTML 编码任何网站用户输入的数据
如:%=Html.Encode(feedback.Message)%
使用 HTML 编码一个字符串的含意是什么呢?使用 HTML 编码字符串时,危险字符如 和 被替换为 HTML
实体,如 和 。所以,当使用 HTML 编码字符串
scriptalert(“Boo!”)/script时,它将转换为
scriptalert(“Boo!”)/script。浏览器在解析编码的字符串时不再执行 JavaScript
脚本。而是显示无害的页面
方法 2:写入数据库之前的 HTML 编码
除了在视图中显示数据时使用 HTML 编码数据,还可以在将数据提交到数据库之前使用 HTML 编码数据。第二种方法正是程序清单 4 中 controller 的情况。
如:
public ActionResult Create(string message)
{
// Add feedback
var newFeedback = new Feedback();
newFeedback.Message = Server.HtmlEncode(message);
newFeedback.EntryDate = DateTime.Now;
db.Feedbacks.InsertOnSubmit(newFeedback);
db.SubmitChanges();
// Redirect
return RedirectToAction(“Index”);
}
请注意,Message 的值在提交到数据库之前是在 Create() 操作中经过 HTML 编码的。当在视图中重新显示 Message 时,Message 被 HTML 编码,因而不会执行任何注入到 Message 中的 JavaScript。
总结
通常,人们喜欢使用本教程中讨论的第一种方法,而不喜欢使用第二种方法。第二种方法的问题在于在数据库中最终会保留 HTML
编码的数据。换言之,数据库中的数据会包含奇怪的字符。这有什么坏处呢?如果需要用除网页以外的形式显示数据库数据,则将遇到问题。例如,不能轻易在
Windows Forms 应用程序中显示数据。
做什么开发的程序员以后可以往黑客方面发展?
做程序开发,会多种编程框架的程序员可以往黑客方向发展:
一、做黑客要具备的技能和知识:
(1) 计算机的各种配件知识。
(2) 网卡, 路由器,交换机等一些网络设备,的专业术语及工作原理。
(3) 网线的分类。
(4) 数据传输的基本情况。
(5) 交叉线。
(6) 直通线的水晶头打法。
(7) 了解最新的网络设备, 具有那些功能, 试着去解释或想象这些功能的实现方法。
(8) 了解硬件编程语言(汇编语言html/css/js + php)。
(9) 深入学习内存分配的原理 对于网络知识,本鼠认为并不是多多易善,而且恰恰相反,只要专著于一门就OK了!因为,网络知识实在是太过宏大,一个人就算以一生的时间也不可能强其完全学完,何况处在知识爆炸的今天,往往一门技术,你刚刚掌握,说不定它已经成为了众所周知的秘密了。所以学习黑客技术,讲求的就是一个“快”字!当然这首先需要大家有扎实的网络基础知识。
二、以下列举不同类型或等级的黑客:
黑客(术语),对技术研修深入的计算机安全专家。
黑客(计算机安全)或饼干,访问计算机系统安全系统失灵。
黑客(爱好者),以创新的定制或组合的零售电子和电脑设备。
黑客(程序员亚文化),一个反独裁的软件开发方法,伴随着自由软件运动。
黑客与普通程序员的十大区别
1. 黑客是程序员的子集。
2. 程序员在解决那些原先已经被解决过的问题。而黑客通常是在尝试解决一些新的问题。
3. 程序员是一种职业,而黑客是一种兴趣。
4. 程序员的工作有很多限制,而黑客可以尽情发挥。
5. 程序员都想把自己说得更好,因为他们要推销自己,而真正的黑客更谦虚,他们知道自己懂得还不够多。
6. 程序员是一种“职责”,需要的是对编程语言的使用,更希望尽快完成工作,而不是探寻为什么要做这项工作。做一个程序员没有什么错,但生活中有 很多比编程更重要的事情。相反,黑客是一种“心态”,对技术有着极大的好奇,希望理解核心的工作原理,喜欢创造。尝试理解如何工作,如何做得更好,如何让事情做得特别。黑客就像艺术家或哲学家,同时有着科学工程的天赋,有很多“为什么”和“为什么不”。
7. 程序员和黑客,就如同画匠和艺术家,DIYer和工匠,教科书的方式和创新的方式。
8. 程序员的目标是写出程序,完成需求,而黑客是要让程序为自己而用,满足自身需求。
9. 程序员和黑客都在写代码,只是黑客把不可能变为了可能。
10. 程序员的代码:
#ifndef __A_B___S__LIB_____2___
#include "mything3.h"
#include "mything4.h
#include "lib/bicycle.h"
#include "lib/noodle.h"
#endif
#ifndef __A_B___S__LIB______4__
#include "mything1.h"
#include "mything2.h"
#include "lib/mything3.h"
#include "lib/spaghetti.h"
#endi
而黑客的代码:
#include "myhack.c"
他们的代码通常非常高效,但不被认可,因为人们根本看不懂。
Javascript 看看黑客怎么写的 [转]
它可以在大部分浏览器上运行。(虽然目前我测试过手头的浏览器都能运行,但理论上不能保证所有浏览器都能正确运行,原因见下文) 这段代码的好处(对于黑客)是,它不包含任何字符或数字,可以逃过某些过滤器的检查。比如说,如果假定一个AJAX请求将返回一个只包含数字的JSON,于是很可能会简单判断了一下其中不含字母就直接eval了,结果给黑客们留下了后门。上面的代码功能很简单,只是alert(1),但使用同样的原理,完全可以干出更复杂的事,例如alert(document.cookie)。更重要的是,这段代码再一次提醒我,黑客的想象力是无限的……正如Ryan Barnett的演讲标题:"XSS:The only rule is no rule"。 我们可以把它分为两个部分来理解: 第一部分: ($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+($$=($_=!''+$)[_/_]+$_[+$])])() 第二部分:[__[_/_]+__[_+~$]+$_[_]+$$](_/_) 其中第一部分是核心,我们首先对它进行分析,先缩进一下: ($= [$=[]][ (__=!$+$)[_=-~-~-~$] + ({}+$)[_/_] + ($$= ($_=!''+$)[_/_] + $_[+$]) ] )() 显然,最外层是(...)()形式的函数调用,我们需要看看这里究竟调用了什么函数,返回了什么。下一步,我们把原来代码中赋值表达式提取出来,将其改写为以下等价形式:$ = []; //1 __ = !$+$; //2 _ = -~-~-~$; //3 $_=!''+$; //4 $$ = $_[_/_] + $_[+$]; //5 $= [$][ __[_] + //6 ({}+$)[_/_] + //7 $$ //8 ]; //9 $(); //10 现在来一行行看: 1. $先赋值为一个空数组 (后面会被覆盖) 2. __ = ![] + [] = false + [] = "false" 这里利用了javascript运算的强制类型转换特性。首先空数组是一个非null值,因此![]的结果是false(布尔型)。在计算false + []时,由于数组对象无法与其他值相加,在加法之前会先做一个toString的转换,空数组的toString就是"",因此事实上在计算false + ""。这时false被自动转换为字符串。最终结果是"false"+"" = "false"。 **换句话说,在$为空数组时,使用 “+$”的方式可以将任何一个值转为字符串** 3. 在计算~[]时,~需要一个数字操作数,空数组无法直接转换为数字,则作为0处理。因此~[] = ~0 = -1。 参考: ~3 = -4 ~[3] = -4 ~[3,2] = -1 (无法转为数字) ~"3" = -4 ~"abc" = -1 因此: _ = -~-~-~[] = -~-~-(-1) = -~-~1 = -~-(-2) = -~2 = -(-3) = 3 理论上,可以用这种方式得出1-9所有数字 4. !''是true,使用+$将其变为字符串 "true" 5. 这里需要注意的是,之前一直用“值+[]”来获得“值”的字符串形式。而“+[]”则是0(正号导致[]被自动转换为数值0)。因此:$$ = "true"[3/3] + "true"[+[]] = "true"[1] + "true"[0] = "rt" 6. __[_] = "false"[3] = "s" 7. ({} + [])导致空对象{}被转换为字符串"[object Object]", 因此({}+$)[_/_] = "[object Object]"[1] = "o" 9. 这里把$覆盖为 [[]]["s"+"o"+"rt"]。注意这里[[]]本身是一个包含空数组的数组,其实对这一步来说,任何一个数组都没有关系(不一定要是嵌套数组),但作者巧妙地把$的首次赋值式放在了数组内部,使代码更为紧凑。最终结果是,$ = [[]]["sort"] = [[]].sort = Array.prototype.sort。 10. 调用$(),作为整个表达式最终的取值。需要注意,$是全局范围的,是window的一个属性,相当于window.$。而Array.prototype.sort会返回this。对于window.$来说,this就是window。因此,整个第一部分的值,就是window本身!当然,这个过程的正确运作依赖于当前浏览器的Array.prototype.sort实现能对this为window的情况容错。 通过第一部分,我们已经获得将任何值转换为字符串的简单方法,并能产生任意的数值,理论上就可以从javascript的取值系统中提取出大部分字母(不知道是不是全部,需要考证)。并且,我们获取到了window的引用。下面就可以开始上下其手,为所欲为了。木哈哈哈哈哈! 可以看出,上面的第10步是与浏览器的具体实现相关的,因此也存在着某些浏览器下需要对代码作出修改的可能。 现在看第二部分,事实上已经非常明朗了,唯一需要注意的是,现在$是一个函数,因此~$ = ~0 (无法直接转换为数字则作为0处理) = -1。[__[_/_]+__[_+~$]+$_[_]+$$](_/_) = ["false"[1]+"false"[3+(-1)]+"true"[3]+"rt"](1) = ["a"+"l"+"e"+"rt"](1) 所以,整条式子相当于:window["alert"](1) 最后只想再感慨一次:黑客的想象力是无限的。理解代码并不难,问题是一开始时他们是怎么能想出来的。。。
怎样当黑客?
可以说想学黑客技术,要求你首先是一个“T”字型人才,也就是说电脑的所有领域你都能做的来,而且有一项是精通的。因此作为一个零基础的黑客爱好者来说,没有良好的基础是绝对不行的,下面我就针对想真正学习黑客的零基础朋友制作一个学习方案,注意!我是指“真正想学黑客技术”的朋友,如果你只是想玩玩,花一上午时间学学怎样用各种工具就可以了。
一、前期
1、了解什么是黑客,黑客的精神是什么。当然了解一下几大著名黑客或骇客的“发家史”也是很有必要的。
2、黑客必备的一些基础命令,包括DOS命令,以及UNIX / Linux下的命令。
3、远程扫描、远程刺探技术。包括通过系统自带命令的信息刺探以及使用工具扫描等。
4、密码破解。了解现在的密码破解的适用范围,以及操作技巧等等。
5、溢出攻击。溢出工具的使用方法。
6、注入攻击。注入攻击只是一个简称,这里还要包括XSS、旁注、远程包含等一系列脚本攻击技巧。
7、学会各种编译工具的使用方法,能编译所有ShellCode。
8、学会手动查杀任何木马、病毒,学会分析Windows操作系统,以使自己百毒不侵。
二、中期
1、学习所有Windows下服务器的搭建步骤(ASP、PHP、JSP)。
2、掌握例如Google黑客、cookies 、网络钓鱼、社会工程学等等等等。
3、学习HTML、JavaScript、VBScript。
4、学习标准SQL语言,以及大多数数据库的使用。
5、学习ASP,并拥有发掘ASP脚本漏洞的能力。
6、学习PHP,并拥有发掘PHP脚本漏洞的能力。
7、学习JSP,并拥有发掘JSP脚本漏洞的能力。
8、学习掌握最新脚本的特性性以及发掘漏洞的方法,例如眼下的WEB2.0。(A1Pass注:此文写于2007年8月)
三、后期
1、确定自己的发展方向
2、学习C语言,并尝试改写一些已公布的ShellCode。
3、学习C++,尝试编写一个属于自己的木马(如果你想自己编写木马的话)。
4、学习汇编
5、研究Linux系统内核。
6、学习缓冲区溢出利用技术。
7、ShellCode技术。
8、堆溢出利用技术、格式化串漏洞利用技术、内核溢出利用技术、漏洞发掘分析。
如果大家有什么不明白的,可以到百度或Google搜索.
Windows操作系统,以使自己百毒不侵。二、中期1、学习所有Windows下服务器的搭建步骤(ASP、PHP、JSP)。2、掌握例如Google黑客、cookies 、网络钓鱼、社会工程学等等等等。3、学习HTML、JavaS