㈠ 如何防止跨站点脚本攻击
你好~
XSS漏洞产生的原因:
跨站点脚本的主要原因是程序猿对用户的信任。开发人员轻松地认为用户永远不会试图执行什么出格的事情,所以他们创建应用程序,却没有使用任何额外的代码来过滤用户输入以阻止任何恶意活动。另一个原因是,这种攻击有许多变体,用制造出一种行之有效的XSS过滤器是一件比较困难的事情。
但是这只是相对的,对用户输入数据的”编码”和”过滤”在任何时候都是很重要的,我们必须采取一些针对性的手段对其进行防御。
如何创造一个良好的XSS过滤器来阻止大多数XSS攻击代码
1 .需要重点”编码”和”过滤”的对象
The URL
HTTP referrer objects
GET parameters from a form
POST parameters from a form
Window.location
Document.referrer
document.location
document.URL
document.URLUnencoded
cookie data
headers data
database data
防御XSS有一个原则:
以当前的应用系统为中心,所有的进入应用系统的数据都看成是输入数据(包括从FORM表单或者从数据库获取到的数据),所有从当前应用系统流出的数据都看作是输出(包括输出到用户浏览器或向数据库写入数据)
对输入的数据进行”过滤”,对输出数据进行”编码”。这里的”编码”也要注意,必须针对数据具体的上下文语境进行针对性的编码。例如数据是输出到HTML中的那就要进行HtmlEncode,如果数据是输出到javascript代码中进行拼接的,那就要进行javascriptEncode。
如果不搞清楚数据具体输出的语境,就有可能因为HtmlParser()和javascriptParser()两种解析引擎的执行先后问题导致看似严密的”编码”形同虚设。
2. HtmlEncode HTML编码
它的作用是将字符转换成HTMLEntities,对应的标准是ISO-8859-1
为了对抗XSS,在HtmlEncode中要求至少转换以下字符:
& --> &
< --> <
> --> >
" --> "
' --> '
/ --> /
在php中:
htmlentities
http://www.w3school.com.cn/php/func_string_htmlentities.asp
htmlspecialchars
http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp
3. javascriptEncode javascript”编码”
javascriptEncode与HtmlEncode的编码方法不同,HtmlEncode是去编码,而javascriptEncode更多的像转义,它需要使用”\”对特殊字符进行转义。从原理上来讲,这都符合编码函数的一个大原则: 将数据和代码区分开,因为对于HTML Tag来说,我们对其进行”可视化(转换成可以见字符)”的编码可以将数据和HTML的界限分开。而对于javascript来说,我们除了要进行编码之外,还需要对特殊字符进行转义,这样攻击输入的用于”闭合”的特殊字符就无法发挥作用,从而避免XSS攻击,除此之外,在对抗XSS时,还要求输出的变量必须在引号内部,以避免造成安全问题。
escape()
http://www.w3school.com.cn/js/jsref_escape.asp
该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ – _ + . / 。其他所有的字符都会被转义序列(十六进制\xHH)替换。
利用这个编码函数,不仅能防御XSS攻击,还可以防御一些command注入。
一些开源的防御XSS攻击的代码库:
PHP AntiXSS
这是一个不错的PHP库,可以帮助开发人员增加一层保护,防止跨站脚本漏洞。
https://code.google.com/p/php-antixss/
xss_clean.php filter
https://gist.github.com/mbijon/1098477
HTML Purifier
http://htmlpurifier.org/
xssprotect
https://code.google.com/p/xssprotect/
XSS HTML Filter
http://finn-no.github.io/xss-html-filter/
原文地址:http://resources.infosecinstitute.com/how-to-prevent-cross-site-scripting-attacks/
希望可以帮助到你~望采纳哦~谢谢~
㈡ 如图,织梦图集的第三种样式实现不了,自己改了好多次,都没成功,图片都是成一列,想实现多行多列的样式
以下供你参考:
第一步:如果是图片集的编辑,那么找到该页面的php文件,位于后台dede目录下的album_edit.php,搜索XSSClean,找到代码 $arcRow=XSSClean($arcRow);$addRow=XSSClean($addRow); 把该段代码注释掉就可以了
第二步:同理软件等其他内容模型如果出现该问题,解决方法也是一样的。除此之外,我们会发现虽然文章编辑的时候可以显示英文逗号了,但后台编辑图片集列表仍然无法显示逗号,找到include目录下的datalistcp.class.php,搜索XSSClean,找到 $rsArray[$i] = $this->XSSClean($arr); 更换成$rsArray[$i] = $arr; 这样就可以了
㈢ 现在比较好用的前端开发工具有哪些啊
1. node.js + npm, 这个是前端工具的一个平台,没有他们就没有以下的工具,建立开发环境,下载开发工具,运行开发工具的利器
2. bower, 库依赖管理器,类似于npm,但针对浏览器JavaScript的依赖管理,减少寻找库,下载库和升级库的烦恼
3.grunt,流程自动化管理工具,将你非编程的开发步骤减到最小,grunt watch+liveReload或者grunt connect,可以使得免除你F5无尽地狱,发布和开发各种无压力。以下大部分开发工具,都有grunt的相对应的插件,也就是说他们都能利用grunt进行自动化运行
5. 本人用less比较多,因为基本无缝兼容历史遗留系统中的css,(而Sass语法比较特殊,还没有专门用过,应该开发新系统的css比较好),一套css预编译语言,可以把less语法转成css语法,lessc是less语言编译器,配合grunt less,编写大型css文档毫无压力。
6.Phantomjs,没有界面的浏览器,用js脚本控制其操作网页。测试,抓图,网页流程自动化利器。配合casperjs的语法简化功能真强库后,控制Phantomjs就更加容易了
7. grunt PhotoBox, 利用phantomjs抓图功能和ImageMagick图片比较功能,在利用live-reload即时刷新功能,可以让你开发css的时候,快速对n多个页面进行观察,看其前后变化。不过缺点也比较明显,就是速度慢。但比起手动对比来看,还是非常快的。值得css开发时拥有
8. phantomCSS,这个和grunt photobox类似,都用于css开发的,差别是photobox是全局观察差别,而这个是单元组件观察差别,它方便你就抓页面中某一块元素然后进行前后比较,更加注重细节上的差异,这个比较合适组件开发时候使用。
9. jshint,帮助你快速定位JavaScript的语法错误和潜在的跨浏览器兼容性问题。在部署你JS前,用jshint检查一下是没错的 。
10.UglifyJS,压缩JavaScript代码,使你的JS代码可以更加快速的加载。有grunt的插件
11. browserify允许你在浏览器里面使用CMD标准模块,但本人认为它的另外一个优势是合并代码,开发时候可以把代码模块化,分成很多很多小文件,然后有调理的放到相对应文件夹下,然后最后合成单一文件。本人曾经利用browserify开发greasemonkey代码,大大简化了greasemonkey的开发难度和增强了greasemonkey代码的质量。browserify有grunt插件,这样又减少的开发步骤。
12. Karma, google开发的一个单元测试运行器,这个自己本身不是一个单元测试框架,而是配合测试单元框架的一个工具。由于前端浏览器众多,就算你有live-reload这样自动化工具,但是还是要手动打开各种浏览器,手动把你的单元测试在各个浏览器都运行一遍。这个工具目的是目的就是让电脑能自动化打开各种浏览器,然后把单元测试在各个浏览器中自动运行一遍,让这个步骤也能自动化了。
13.clean-css (grunt cssmin), 我用的是grunt cssmin,但是grunt cssmin实际上背后使用的是clean-css工具,这个工具就是用来压缩精简css的,让css文件大小更小。
㈣ 如何防止跨站点脚本攻击
跨站点脚本的主要原因是开发人员对用户的过度信任,未能过滤用户输入以阻止恶意活动。这种攻击的复杂性使得创建有效的XSS过滤器变得困难,但并非不可能。防御XSS的关键在于对输入数据进行过滤,对输出数据进行编码。
需要特别注意编码和过滤的对象包括URL、HTTP referrer对象、GET和POST参数、Window.location、Document.referrer、document.location、document.URL、未编码的cookie数据、headers数据、数据库数据等。
防御XSS的原则是以应用系统为中心,所有进入应用系统的数据都视为输入数据,所有从应用系统流出的数据都视为输出数据。对输入数据进行过滤,对输出数据进行编码。
HTML编码(HtmlEncode)的作用是将字符转换为HTMLEntities,对应标准为ISO-8859-1。在PHP中,可以使用htmlentities和htmlspecialchars函数实现HTML编码。
JavaScript编码(javascriptEncode)与HTML编码不同,它需要使用“\”对特殊字符进行转义。escape()函数可以实现JavaScript编码,该方法不会对ASCII字母和数字进行编码,也不会对一些ASCII标点符号进行编码,其他所有字符都会被转义序列(十六进制\xHH)替换。使用此编码函数可以防御XSS攻击和一些命令注入。
开源的防御XSS攻击的代码库包括PHP AntiXSS、xss_clean.php filter、HTML Purifier、xssprotect和XSS HTML Filter。