逃避HTML和JSON

时间:2018-03-31 14:26:35

标签: java security jdbc xss apache-stringutils

是否有推荐的方法来逃避HTML和JSON?目前我正在使用StringEscapeUtils中的Apache Commons Lang。在将数据放入我的数据库之前,我首先将输入String转发到首先转义HTML然后转义JSON的方法。该方法如下所示:

>head(c_0000)
         x           y          z          vx          vy          vz          m     id    time
1  0.485939060 -0.52435857 -0.5319823  0.46153894 -0.03377579 -0.32276499 1.5625e-05  1    0
2 -0.065960690  0.08084424 -0.2760305 -0.57578009  1.10781500 -0.29340765 1.5625e-05  2    0
3 -0.034809157  0.07679548 -0.3908799 -0.55399138 -0.17386098  0.05925081 1.5625e-05  3    0
4  1.502104500  1.44298320  1.4497470 -0.09026588  0.32661179 -0.31059352 1.5625e-05  4    0
5 -0.009553516  0.53834057 -0.2672637  0.01185465 -0.01187402 -0.40556487 1.5625e-05  5    0
6 -0.356016520 -0.04570535  0.3350056 -0.70900804 -0.64990276  0.39794922 1.5625e-05  6    0


> summary(c_0000)
   x                   y                   z                   vx                   vy           
 Min.   :-4.698981   Min.   :-5.095714   Min.   :-5.015129   Min.   :-1.6192034   Min.   :-1.482613  
 1st Qu.:-0.334822   1st Qu.:-0.336613   1st Qu.:-0.335628   1st Qu.:-0.2697400   1st Qu.:-0.271454  
 Median :-0.000482   Median :-0.000432   Median :-0.003949   Median :-0.0002091   Median : 0.001419  
 Mean   : 0.000000   Mean   : 0.000000   Mean   : 0.000000   Mean   : 0.0000000   Mean   : 0.000000  
 3rd Qu.: 0.334706   3rd Qu.: 0.332101   3rd Qu.: 0.330509   3rd Qu.: 0.2691137   3rd Qu.: 0.270754  
 Max.   : 5.401047   Max.   : 5.680950   Max.   : 4.762590   Max.   : 1.5473192   Max.   : 1.584202  
   vz                   m                   id             time  
 Min.   :-1.6852456   Min.   :1.563e-05   Min.   :    1   Min.   :0  
 1st Qu.:-0.2709821   1st Qu.:1.563e-05   1st Qu.:16001   1st Qu.:0  
 Median : 0.0001771   Median :1.563e-05   Median :32000   Median :0  
 Mean   : 0.0000000   Mean   :1.563e-05   Mean   :32000   Mean   :0  
 3rd Qu.: 0.2700553   3rd Qu.:1.563e-05   3rd Qu.:48000   3rd Qu.:0  
 Max.   : 1.6006814   Max.   :1.563e-05   Max.   :64000   Max.   :0  

此方法是否能抵御危险的HTML和JSON?我想阻止XSS(跨站点脚本)。

1 个答案:

答案 0 :(得分:0)

我已经看到了过滤输入和转义输出的建议。因此,大多数情况下,应用JSON编码和HTML编码都没有意义,除非您在HTML属性中生成JSON数据。

在直接插入的上下文中,转义HTML和JSON都是安全的 将值转换为HTML元素:

uploadLogo(logo: FormData): Observable<any>{
  const headers = new HttpHeaders({'Content-Type': 'application/json'});
  return this.http.post('http://homestead.test/api/logo, logo, {headers: headers});
}

或JSON字符串值:

<p>[INPUT]</p>

他们不会逃到周围的环境中。

虽然还有其他上下文可能不像CSS样式或URL那样安全,等等。要应用的正确编码取决于周围格式是什么,因此应在可获得此信息的输出上选择。

如果值未在输出中进行编码,则如果数据源发生更改,或者在新的上下文中使用,则会导致漏洞。

另一个问题是值会被破坏。如果对JSON数据使用JSON编码或对JSON数据使用HTML编码,则将使用不必要的反斜杠和&符号转义序列填充值。如果引号和括号符号是有效输入,那么您应该在输入中保留它们,如果它们不是有效输入,那么您根本不应该接受它们。