简介 为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意图,我们需要对所有的用户输入都进行一定程度的校验。 本文将带领大家探讨一下用户输入校验的一些场景。一起来看看吧。...我们知道在java中字符是基于Unicode进行编码的。但是在Unicode中,同一个字符可能有不同的表示形式。所以我们需要对字符进行标准化。...java中有一个专门的类Normalizer来负责处理,字符标准化的问题。...public void testNormalizer(){ System.out.println(Normalizer.normalize("\u00C1", Normalizer.Form.NFKC...)); System.out.println(Normalizer.normalize("\u0041\u0301", Normalizer.Form.NFKC)); } 输出结果
这是因为,Python 会把所有的变量名转换为它的 NFKC 等价形式。 从Python的官方文档2.3....; comparison of identifiers is based on NFKC. ” 转换的原理可以参阅维基百科:Unicode equivalence - Wikipedia[2]。...'f' >>> unicodedata.normalize('NFKC', '?') == 'f' True 可以看到,手写字符?...通过 NFKC 标准转换以后,就是普通的字母f,所以在 Python 里面,如果作为变量名,这两个字符是一样的。 除了英文字符外,中文字符也可以转换。...') == '比' True 这样一来,如果你需要做一个服务,它接收用户的输入,但你又不想让用户输入这种长得像中文或者英文,但是却又不是的怪异字符,你就可以使用 NFKC 把它转换为标准的字符。
normalization") ValueError: netloc 'suctf.cc/usr%2ffffffflag @111' contains invalid characters under NFKC...(): - return - # looking for characters like \u2100 that expand to 'a/c' - # IDNA uses NFKC...NFKC Unicode 规范化格式 KC。 NFKD Unicode 规范化格式 KD。 在Unicode中,某些字符能够用多个合法的编码表示。...Python同样支持扩展的标准化形式NFKC和NFKD,它们在处理某些字符的时候增加了额外的兼容特性。...import unicodedata netloc2 = unicodedata.normalize('NFKC', netloc) if netloc == netloc2: return
的规范如下图所示: NFC: Normalization Form Canonical Composition NFD: Normalization Form Canonical Decomposition NFKC...unicodedata.normalize('NFC', string)) print ('NFD: ' + unicodedata.normalize('NFD', string)) print ('NFKC...: ' + unicodedata.normalize('NFKC', string)) print ('NFKD: ' + unicodedata.normalize('NFKD', string))...NFKC: Leonishan NFKD: Leonishan 我们可以看到同样的字符在不同的规范下的差异。...abort(403, description="XSS Detected") else: name = unicodedata.normalize('NFKD', name) #NFC, NFKC
alert(XSS) // #删除关闭标签 alert`XSS` #using backticks instead of parenetheses java...字符通常通过四种标准Unicode标准化算法之一进行标准化: NFC:标准化形式规范组成 NFD:标准化形式规范分解 NFKC:标准化表单兼容性组成 NFKD:标准化表单兼容性分解 特别是NFKC和NFKD...这意味着,在Web服务器上,用户输入首先被清理,然后使用NFKC或NFKD进行归一化,意外的兼容字符可以绕过WAF,并在后端作为其规范等价物执行。 这是WAF不期望与Unicode兼容的字符的结果。...abort(403, description="XSS Detected") else: name = unicodedata.normalize('NFKD', name) #NFC, NFKC
unicodedata.decomposition('ガ')) 30AB 3099 >>> unicodedata.normalize(form, unistr) 把一串UNICODE字符串转换为普通格式的字符串,具体格式支持NFC、NFKC...Normalization Form D (NFD),Normalization Form KD (NFKD),Normalization Form C (NFC),和Normalization Form KC (NFKC...大约来说,NFD和NFKD将可能的字符进行分解,而NFC和NFKC将可能的字符进行组合。...Alt 0098 or Alt +00621 Programming Source Code Encodings Python hex: u”\u0062”, Hex for C++ and Java
unicodedata.decomposition('ガ')) 30AB 3099 >>> unicodedata.normalize(form, unistr) 把一串UNICODE字符串转换为普通格式的字符串,具体格式支持NFC、NFKC...Normalization Form D (NFD),Normalization Form KD (NFKD),Normalization Form C (NFC),和Normalization Form KC (NFKC...大约来说,NFD和NFKD将可能的字符进行分解,而NFC和NFKC将可能的字符进行组合。 ...Code Alt 0098 or Alt +00621 Programming Source Code Encodings Python hex: u"\u0062", Hex for C++ and Java
它有四个参数:NFC、NFD、NFKC和NFKD。 NFC(Normalization Form C)使用最少的码位构成等价的字符串,而 NFD 把组合字符分解成基字符和单独的组合字符。...在另外两个规范化形式(NFKC 和 NFKD)的首字母缩略词中,字母 K 表示“compatibility”(兼容性)。 一般使用 NFC 保存字符串。后两种转换会有格式损失,但在搜索中却很有用。
Python同样支持扩展的标准化形式NFKC和NFKD,它们在处理某些字符的时候增加了额外的兼容特性。...letters are broken apart here >>> unicodedata.normalize('NFKD', s) 'fi' >>> unicodedata.normalize('NFKC
JavaScript 中使用 normalize[2] 功能,并传递NFD参数,normalize方法返回字符串的 Unicode 规范化形式 normalize支持四种 Unicode 规范化形式,NFC,NFD,NFKC
♂️ 捕捉相似外观字符 在处理标识符或其他可能受到相似外观字符欺骗的文本时,使用兼容性规范形式(NFKC和NFKD)可以将视觉上几乎相同的字符映射到单一值。 ️
tokenizers.models import BPE from tokenizers.trainers import BpeTrainer from tokenizers.normalizers import NFKC...构建分词器 GPT2 基于 BPE 算法实现 tokenizer = Tokenizer(BPE(unk_token="")) tokenizer.normalizer = Sequence([NFKC
txt)) # no_marks = no_marks.replace('ß', 'ss') # return unicodedata.normalize('NFKC
下面的代码片段演示了一个基于 NFKC 归一化的跨站点脚本漏洞(XSS,Cross-Site Scripting)。...request): user_input = escape(request.GET['p']) normalized_user_input = unicodedata.normalize("NFKC...在第 7 行中,经过清洗的输入被 NFKC 算法归一化,以便在第 8-9 行中通过 test.html 模板正确地渲染。 templates/test.html <!
UsernameField(forms.CharField): def to_python(self, value): return unicodedata.normalize('NFKC
normalize def clean_normalize_whitespace(x): if isinstance(x, str): return normalize('NFKC...unicode characters and strip trailing spaces """ if isinstance(x, str): return normalize('NFKC
原文Generics in Java....:实现Java在编译时期进行类型检查。...由于Java不支持多重继承,所以只能扩展一个类。...in Java, and we use them to refer to an unknown type....因此,这将是您练习Java泛型的理想文章。❤️I will bring you another Java stuff next time.下次我会给您带来另一款Java产品。Bye guys! 再见
,Sun官方所定义的Java技术体系包括: Java程序设计语言 JavaAPI类库 运行于各个硬件平台上的虚拟机 Class文件格式 商业机构和开源社区的第三方Java类库 JDK: 包括Java...程序设计语言、JavaAPI类库、运行于各个硬件平台上的虚拟机,JDK是用于支持Java程序开发的最小环境; JRE: Java API类库中的Java SE API子集和Java虚拟机这两部分统称为...JRE与JDK的区别: JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。...JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。...Java SE: 支持面向桌面级应用的JAVA平台,提供了完整的Java核心API,这个版本以前称为J2SE。
多线程是 Java 语言的一个很重要的特征。 多线程程序设计最大的特点就是能够提高程序执行效率和处理速度。Java 程序可同时并行运行多个相对独立的线程。...Java 提供的多线程机制使一个程序可同时执行多个任务。线程有时也被称为小进程,它是从一个大进程里分离出来的小的独立的线程。由于实现了多线程技术,Java 显得更健壮。...程序与程序ThreadDemo1.java表面上看运行结果相同,但是仔细对照会发现,程序OnlyThread.java中对 run方法的调用在程序ThreadDemo1.java中变成了对 start...也就是说看java是运行在什么操作系统上,java这个应用程序进程的线程调度算法就是什么。...Java SE 还声明JVM可以任何方式实现线程的优先级,甚至忽略它的存在。 3、在Linux上Java线程一对一地映射到内核级线程上。
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。...概述: Java是面向对象的程序设计语言,Java语言提供了定义类、成员变量、方法等最基本的功能。...Java的继承具有单继承的特点,每个子类只有一个直接父类。...2、访问修饰符: Java提供了3个访问修饰符:public、protected和private,另外还有一个默认的修饰符default,Java的访问控制级别如下图所示: ?...Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。
领取专属 10元无门槛券
手把手带您无忧上云