Maison >Java >javaDidacticiel >Quels sont les moyens de prévenir les attaques XSS dans Springboot2.0

Quels sont les moyens de prévenir les attaques XSS dans Springboot2.0

王林
王林avant
2023-05-19 20:43:041526parcourir

Lors du développement de code de projet, il est facile d'ignorer la protection contre les attaques XSS. Il existe de nombreux intercepteurs globaux personnalisés sur Internet pour implémenter le filtrage XSS. être si gênant. SpringBoot garde Il existe de nombreux hooks (points d'extension), sur la base desquels nous pouvons intelligemment implémenter un filtrage XSS global

Pour prévenir les attaques XSS, il existe généralement deux méthodes :

# 🎜🎜#

Escape Utilisez la classe d'outils HtmlUtils pour implémenter

Filtering Supprimer les balises sensibles #🎜🎜 #jsoup a implémenté une fonction d'étiquette sensible Clean très puissante

Trois implémentations de méthodes d'échappement :

Méthode d'échappement 1 : Enregistrez un convertisseur personnalisé

Custom conversion Le convertisseur intègre l'implémentation de la classe PropertyEditorSupport.Le convertisseur peut également implémenter la conversion de format de données, telle que la conversion de date.Besoin d'hériter de la méthode BaseController

@Component
public class DateEditor extends PropertyEditorSupport {

    Pattern pattern = Pattern.compile("[^0-9]");

    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (StrUtil.isBlank(text)) {
            return;
        }
        text = text.trim();
        Matcher matcher = pattern.matcher(text);
        text = matcher.replaceAll("");

        int length = text.length();
        Date date;
        switch (length) {
            case 14:
                date = DateTime.parse(text, DateTimeFormat.forPattern("yyyyMMddHHmmss")).toDate();
                break;
            case 12:
                date = DateTime.parse(text, DateTimeFormat.forPattern("yyyyMMddHHmm")).toDate();
                break;
            case 10:
                date = DateTime.parse(text, DateTimeFormat.forPattern("yyyyMMddHH")).toDate();
                break;
            case 8:
                date = DateTime.parse(text, DateTimeFormat.forPattern("yyyyMMdd")).toDate();
                break;
            case 6:
                date = DateTime.parse(text, DateTimeFormat.forPattern("yyyyMM")).toDate();
                break;
            case 4:
                date = DateTime.parse(text, DateTimeFormat.forPattern("yyyy")).toDate();
                break;
            default:
                return;
        }
        setValue(date);
    }
}

Escape : Convertisseur

@Component
public class StringEscapeEditor extends PropertyEditorSupport {

    public StringEscapeEditor() {
        super();
    }

    @Override
    public String getAsText() {
        Object value = getValue();
        return value != null ? value.toString() : "";
    }

    @Override
    public void setAsText(String text) {
        if (text == null) {
            setValue(null);
        } else {
            String value = text;
            value = value.trim();
            setValue(value);
        }
    }
}
@Slf4j
@Component
public class CommentWebBindingInitializer extends ConfigurableWebBindingInitializer {

    private final StringEscapeEditor stringEscapeEditor;

    private final DateEditor dateEditor;

    @Autowired
    public CommentWebBindingInitializer(StringEscapeEditor stringEscapeEditor, DateEditor dateEditor) {
        this.stringEscapeEditor = stringEscapeEditor;
        this.dateEditor = dateEditor;
    }

    @Override
    public void initBinder(WebDataBinder binder) {
        log.info("init bind editor");
        super.initBinder(binder);
        // 注册自定义的类型转换器
        binder.registerCustomEditor(Date.class, dateEditor);
        binder.registerCustomEditor(String.class, stringEscapeEditor);
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer