Maison > Java > javaDidacticiel > le corps du texte

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

王林
Libérer: 2023-05-19 20:43:04
avant
1463 Les gens l'ont consulté

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);
    }
}
Copier après la connexion

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);
        }
    }
}
Copier après la connexion
@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);
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal