简介 为了保证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
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
的规范如下图所示: 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
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 annotation是什么?...; 5 6 import java.lang.annotation.Documented; 7 import java.lang.annotation.ElementType; 8 import...java.lang.annotation.Retention; 9 import java.lang.annotation.RetentionPolicy; 10 import java.lang.annotation.Target...6 import java.sql.Connection; 7 import java.sql.DriverManager; 8 import java.sql.PreparedStatement;...9 import java.sql.ResultSet; 10 import java.sql.SQLException; 11 12 /** 13 * 14 * @author Hongten
大家好,这里是淇妙小屋,一个分享技术,分享生活的博主 后续会发布更多MySQL,Redis,并发,JVM,分布式等面试热点知识,以及Java学习路线,面试重点,职业规划,面经等相关博客 转载请标明出处...Java线程面试题 0.1 线程占用的内存 JDK1.4默认单个线程占用256K JDK1.5默认单个线程占用1M 可以通过-Xss参数设定 0.2 为什么要使用线程池 手动创建线程池的缺点 不受风险控制
领取专属 10元无门槛券
手把手带您无忧上云