首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拉勾
V2EX  ›  corningsun  ›  全部回复第 1 页 / 共 7 页
回复总数  135
1  2  3  4  5  6  7  
XSS 还是得后端处理的,建议直接保存原文到数据库,查询返回前端前做一次转化,后端有很多现成的库可以参考的。

比如说:Jsoup 有很多预定义好的白名单供选择


public static Whitelist relaxed() {
return new Whitelist()
.addTags(
"a", "b", "blockquote", "br", "caption", "cite", "code", "col",
"colgroup", "dd", "div", "dl", "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6",
"i", "img", "li", "ol", "p", "pre", "q", "small", "span", "strike", "strong",
"sub", "sup", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "u",
"ul")

.addAttributes("a", "href", "title")
.addAttributes("blockquote", "cite")
.addAttributes("col", "span", "width")
.addAttributes("colgroup", "span", "width")
.addAttributes("img", "align", "alt", "height", "src", "title", "width")
.addAttributes("ol", "start", "type")
.addAttributes("q", "cite")
.addAttributes("table", "summary", "width")
.addAttributes("td", "abbr", "axis", "colspan", "rowspan", "width")
.addAttributes(
"th", "abbr", "axis", "colspan", "rowspan", "scope",
"width")
.addAttributes("ul", "type")

.addProtocols("a", "href", "ftp", "http", "https", "mailto")
.addProtocols("blockquote", "cite", "http", "https")
.addProtocols("cite", "cite", "http", "https")
.addProtocols("img", "src", "http", "https")
.addProtocols("q", "cite", "http", "https")
;
}


代码调用示例:

import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.safety.Whitelist;

public class JsoupUtil {

private static final Whitelist WHITELIST = Whitelist.relaxed();

static {
// 富文本编辑时一些样式是使用 style 来进行实现的
// 比如红色字体 style="color:red;"
// 所以需要给所有标签添加 style 属性
WHITELIST.addAttributes(":all", "style");
WHITELIST.addAttributes(":all", "class");
WHITELIST.addAttributes(":all", "target");
WHITELIST.addAttributes(":all", "spellcheck");
}

private JsoupUtil() {
}

private static final Document.OutputSettings OUTPUT_SETTINGS = new Document.OutputSettings().prettyPrint(false);

public static String clean(String content) {
if (StringUtils.isBlank(content)) {
return "";
}
return Jsoup.clean(content, "", WHITELIST, OUTPUT_SETTINGS);
}

}
sun772726098
谢谢大佬
去年刚推广到团队的项目中,然后发现,就要过时了。
有点感慨变化太快
60 天前
回复了 ooleslie 创建的主题 Python pycharm debug 的疑问
试试 Evaluate Expression ?

没开 Pycharm 拿 IDEA 截个图吧

https://ws2.sinaimg.cn/large/006tNc79gy1fz9raor1w6j30q20km74q.jpg
76 天前
回复了 1oNflow 创建的主题 程序员 2019 年度晒桌面
95 天前
回复了 wleexi 创建的主题 程序员 下面 Java 代码怎么用 Lambda 表示
Optional.ofNullable(showView.getProvinceId()).map(RegionService::getById).map(Region::getRegionName).ifPresent(showView::setProvinceDisp);
Optional.ofNullable(showView.getCityId()).map(RegionService::getById).map(Region::getRegionName).ifPresent(showView::setCityDisp);
Optional.ofNullable(showView.getDistrictId()).map(RegionService::getById).map(Region::getRegionName).ifPresent(showView::setDistrictDisp);
Optional.ofNullable(showView.getStreetId()).map(RegionService::getById).map(Region::getRegionName).ifPresent(showView::setStreetDisp);
96 天前
回复了 Kamitora 创建的主题 程序员 打算入一款 mbp,有几个问题...
开学前会有优惠的,还送🎧。
啥都别动,喝喝茶就行了。

如果真要动,直接写新的接口,原来的接口千万要留着。
优酷:你以为充会员就没广告了?我们给会员专门准备了“ VIP 推荐”

https://ws3.sinaimg.cn/large/006tNbRwgy1fxuvtnluz1j318g0p0dh6.jpg
个人觉得对 java docs 翻译就已经足够了。
显示器包围法,挡住前面和左右,三台应该够了。
146 天前
回复了 corningsun 创建的主题 Java Java JSON 序列化如何匹配 Python json.dumps() 结果
终于找到方法了,具体看附言内容,谢谢大家了。
146 天前
回复了 corningsun 创建的主题 Java Java JSON 序列化如何匹配 Python json.dumps() 结果
@woodensail 服务端代码改不了了。
@kkkkkrua
fastjson 也有 pretty 方法,但是只是增加了 换行,没有加空格。
objectMapper 的 pretty 方法,在冒号的 两边都加了空格,只去除换行还不够。另外处理 list 数组时,也不一致。
146 天前
回复了 corningsun 创建的主题 Java Java JSON 序列化如何匹配 Python json.dumps() 结果
@misaka19000
现在就是这么干的,但是有个字段是富文本,很容易把别的内容覆盖掉,所以来找更好的方法。
146 天前
回复了 corningsun 创建的主题 Java Java JSON 序列化如何匹配 Python json.dumps() 结果
@misaka19000 @whileFalse

是的,但是 Python 服务端现状就是这个样子了,没法让对方改了。

已经把 FastJson 源码看了一遍了,并没有找到设置“空格”的地方。。😢

```java
package com.alibaba.fastjson.serializer;

public class FieldSerializer implements Comparable<FieldSerializer> {

private final String double_quoted_fieldPrefix;
private String single_quoted_fieldPrefix;

public FieldSerializer(Class<?> beanType, FieldInfo fieldInfo){
...

this.double_quoted_fieldPrefix = '"' + fieldInfo.name + "\":";
...
}

public void writePrefix(JSONSerializer serializer) throws IOException {
SerializeWriter out = serializer.out;

if (out.quoteFieldNames) {
if (out.useSingleQuotes) {
if (single_quoted_fieldPrefix == null) {
single_quoted_fieldPrefix = '\'' + fieldInfo.name + "\':";
}
out.write(single_quoted_fieldPrefix);
} else {
out.write(double_quoted_fieldPrefix);
}
} else {
if (un_quoted_fieldPrefix == null) {
this.un_quoted_fieldPrefix = fieldInfo.name + ":";
}
out.write(un_quoted_fieldPrefix);
}
}
```

https://ws2.sinaimg.cn/bmiddle/62e721e4gw1et00rn36zaj200k00k0sh.jpg
146 天前
回复了 fuchunliu 创建的主题 Java 自学 Java ,求推荐书籍
Java 编程思想
151 天前
回复了 519718366 创建的主题 程序员 入秋了,说说自己被电的那些事吧
可以试试 手表,金属表带的
车子是大件商品,不同地区的政策、运输、环境 对车子的价格影响很大的。
能统一的估计只有厂商指导价了,但是如:日系加价,韩系脱裤子卖,路虎可以降价 10 万,厂商指导价只能作为参考。
如果想了解某一款车型的价格,去各种论坛应该还是比较靠谱的。
171 天前
回复了 sadhen 创建的主题 程序员 送出几本《Scala 实用指南》
分母+1
@MisakaMikoto 我也觉得很好看
1  2  3  4  5  6  7  
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   837 人在线   最高记录 4385   ·  
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 26ms · UTC 19:47 · PVG 03:47 · LAX 12:47 · JFK 15:47
♥ Do have faith in what you're doing.
沪ICP备16043287号-1