不得不说的事600字

时间:2021-11-01 22:33:38 600字

不得不说的事600字(一)

不得不说的事600字(二)

●Velocity安全输出实施原因

为什么要实施这个功能, 安全方面的, 就不多说了, 本人也不是安全专家。 这个方案带来的好处是:

1. 我们认为所有输入都是有恶意的

2. 我们默认会进行html标记的编码

3. 我们认为程序员在安全上是会忘记处理

4. 所有的恶意操作, 将会把在输出上被转义;并且这个是在架构层次解决问题。

当然, 我们从前有了“因”, 才有现在的“果”, 因果报应,因此改造带来的痛苦是存在的, 并且是沉痛的。我们也在努力减少这个方案实施的复杂程度。

●Velocity安全输出原理

由于velocity提供了输出的事件侦听点, 我们可以轻松获得每次渲染的变量的callback调用。 他提供了一个接口:

public interface ReferenceInsertionEventHandler extends EventHandler{

}

我们实现了一个 SecurityReferenceInsertionEventHandler:public Object referenceInsert( String reference, Object value );

public Object referenceInsert(String reference, Object value) {

if (value instanceof String) {

ReferenceAction action = getReferenceAction(reference);

String retValue = (String) value;

switch (action) {

case HTML_XSS_FILTER:

retValue = scanner.scan(retValue);

break;

case JAVASCRIPT_ENCODE:

FastEntities.escapeJavaScript(retValue);

break;

case XML_ENCODE:

retValue = XML.escape(retValue);

break;

case LITERAL:

case URL_FILTER:// do nothing

break;

case HTML_ENCODE:

case PURE_TEXT_HTML_ENCODE:

case NOT_DEFINED:

default:

retValue = HTML40.escape(retValue);

break;

}

return retValue;

}

return value;

}

实际上, 我们仅仅是处理了,velocity的输出string的类型, 因为, 其他的类型输出转义的意义不是很大。

●Velocity安全输出帮助

果不是输出HTML, 请勿使用。 这个表示将会消耗大量的CPU处理。1.html输出 什么都不执行, 按原始格式输出。 他并不是真正的不执行任何变化, 因为他会执行xss的过滤动作。一个非常复杂的安全处理过程, 如

#SHTML($html)

2.xml编码输出, 将会执行 xml encode输出

#SXML($xml)

3.js编码输出 , 将会执行javascript encode输出

#SJS($js)

4.纯文本编码输出, 将会执行html encode. 就是我们通常的使用.

$text

5.已经被业务代码escaped过的输出

这个目前没有什么好的办法, 只能修改业务代码, 去除这些escaped的地方。使用find . |grep java$ |xargs grep -i

StringEscapeUtil.escapeHtml 来寻找程序中出现的, 我找了下exodus里的代码, 有21个地方是这么做的。 我想这个修改起来的难度是比较低的。

6.使用$stringEscapeUtil.escapeHtml($text)输出的地方

由于代码修改起来比较麻烦, 我们使用一个宏来处理这个问题, 这个使用一个统一替换工作。把$stringEscapeUtil.escapeHtml 替换成 #SPURETEXT($text)

7. URL的输出,

也许我们就将来要做URL的安全检查, 因此, 请勿使用在非URL出现的地方 虽然他什么转义都不做。一般情况下, 我们的URL输出使用URIBoker对象, 但是, 我注意到了, 有部分URL使用了URIBoker.render() 或者, URIBoker.toString() 这么输出, 这个会造成URL被html encode. 但是, 这不会造成IE/FF的解释问题。

8.为了避免发生歧义, #ZHTML虽然是不转义, 但是我们明确说的是HTML, 但是, 如果真有不需要转义的情况出现, 我们可以使用#SLITERAL($text)

tips: literal – 照字面的;原义的.

有一点需要强调的是, 我们所有宏的执行, 如果输入的是 null, 那么宏执行后是”” 这点是无法被修正的障碍。出现这样的可能性,而且要被velocity脚本使用null的机会是很少的。 因为加这个宏就意味着用户准备输出了。 

加一个S是为了尽量避免和应用定义的宏出现冲突, 没有别的含义. 但是我们仍然

有几个地方需要我们注意的地方:

1.扩展实现的是编码输出String对象, 如果你输出的不是String对象, 这些宏操作将会失效, 这个是为了提高系统的编码性能,采取的态度。 如果

一个对象没有重新实现toString()的, 这个对象的输出是不可能有html编码的问题的。因为Object.toString实现的是对象地址, 另外实现了toString的方法, 我们姑且认为是安全, 这个虽然严格意义上是不正确的,但是, 我们的系统的确基本是这样工作的。

2.如何避免一个数据被多次encode。

首先我们假设 $text="s&"

●$stringUtil.getXXX($text)

这个形式输出是 s&

●$stringUtil.getXXX("$text")

这个形式输出是 s&

为什么会这样呢,""是告诉velocity, 先输出, 后把参数送给#stringUtil.getXXX. 这是一个非常需要注意的地方,这个地方导致了大量的地方需要修改的地方。 也是目前最无奈的地方。这个这个会造成一些变形的特殊情况, 比如$stringUtil.equals("$text", "&")这样情况就是,

"$text", 这个已经发生htlml encode, 然而 "&"是常量, 常量是无法被转义的,因此这个就是发生严重的bug.

解决的办法是这么写:

$stringUtil.equals($text, "&")

●$stringUtil.getXXX("the pro: $text")

这个情况, 目前我们的系统也是比较多, 常量与输出的混合. 解决这个问题的办法是:$stringUtil.getXXX("the pro: #ZLITERAL($text)")●

●$control.setTemplate($text) 这个系统会自动处理$stringUtil.escapeHtml($text) 这个上面的第6条作出了解释$screen_placeholder这个系统会自动处理

不得不说的事600字(三)

对于网站优化,我们经常会利用html标签来增加优化的效果。H标签就是我们经常会用到的html标签一直。H标签在网页中对文本标题起到着重强调的一种标签,可以引起搜索引擎的侧重。合理的使用H标签可以给网站带来好的效果,而使用的不恰当会给网站带来不利影响,严重的甚至会导致K站。 H标签对搜索引擎会产生什么样的影响? 前面已经说了H标签是其强调作用的一种标签,可以直接引导搜索引擎网站那些内容是重要的,也就是直接告诉搜索引擎在H里的一句话或词语是要着重强调的,H标签的强调作用高于strong。在搜索引擎访问网页进行抓取时,抓取H标签的内容作为强调部分。H标签以标签< h1 >、< h2 >、< h3 >到< h6 >作为标题标签,在使用一般只使用< h1 > < h2 >< h3 >,重要性一次减弱。通常一个网页中只使用一个h1标签,h2、h3可以使用多个。在网页设计中,直接使用h1标签会产生不够美观的效果,所以很多人会用css加以隐藏。或者将h1标签加到网站的logo中使用。 H标签怎么才能正确合理使用? 关于如何使用h标签才算是正确的,其实网上并没有明确的解释,但我们可以通过分析来了解。大家使用H标签时,不外乎就是但是使用的过多,导致优化过度产生不利影响。我们可以通过分析名站来了解具体使用情况。下面以网易页面举例分析。 上图是h1标签的使用,整个网页的首页只使用了一个h1标签。事情也是如此,每个页面只使用1个h1标签,如此更符合搜索引擎优化规范。下面看一下h2标签 通过图观察,h2标签用到了所有的导航中。最后看一下h3标签: h3标签用到新闻标题中,起到一个加粗的作用。通过以上的分析,可以看出,网易的首页合理使用了H标签,没有滥用。有且只有一个h1标签,强调了网页的标题。h2标签放到导航中,h3标签加粗强调新闻标题。 到底还应不应该继续使用h标签? 随着搜索引擎对h标签的弱化以及使用h标签有可能会带来作弊的嫌疑,会有人提出到底还该不该使用H标签?我们可以看一下百度,在百度的首页以及所有产品页面中,我们没有看到h标签,很多名站也摒弃了H标签。我们再看一下谷歌首页,仍然在logo中加入了h1标签,新浪网易也是如此。从主流站的例子里,其实不用担心要不要使用h标签,在没有明确说明之前,我们是完全可以利用h标签来优