是否有推荐的方法来逃避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(跨站点脚本)。
答案 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编码,则将使用不必要的反斜杠和&符号转义序列填充值。如果引号和括号符号是有效输入,那么您应该在输入中保留它们,如果它们不是有效输入,那么您根本不应该接受它们。