清理java中的字符串
是否有任何函数或库可用于清理用户输入。例如,如果用户输入一个名为清理java中的字符串,java,string,Java,String,是否有任何函数或库可用于清理用户输入。例如,如果用户输入一个名为bally's的文本,那么我应该在将其发送到mysql查询之前转义“。同样,我应该能够过滤空字符和\n、\t、\r等。。就像在PHP中一样,我们有mysql\u real\u escape\u string($input)Java中有什么东西可以做到这一点吗 您应该使用setString功能来使用和设置$input的值 使用PreparedStatement的原因是每个数据库可能需要转义不同的内容。这种复杂性隐藏在数据库供应商提供的
bally's
的文本,那么我应该在将其发送到mysql查询之前转义“
。同样,我应该能够过滤空字符和\n、\t、\r等。。就像在PHP中一样,我们有mysql\u real\u escape\u string($input)
Java中有什么东西可以做到这一点吗 您应该使用setString
功能来使用和设置$input
的值
使用
PreparedStatement
的原因是每个数据库可能需要转义不同的内容。这种复杂性隐藏在数据库供应商提供的PreparedStatement
的具体实现中。在Java中,通常不需要手动完成
相反,您将使用,并通过显式或方法将任何参数传递给SQL语句
JDBC驱动程序将以这种方式处理它(根据数据库的不同,通过执行必要的转义或通过从参数中单独发送SQL语句)
例如,您的代码可能如下所示(使用):
为此,可以使用带有占位符的准备语句。看 就像您在PHP中应该做的那样:
当我说只有傻瓜才会使用
mysql\u real\u escape\u string
来支持带有占位符的语句时,我没有冒犯的意思。您使用的转义是特定于您想要使用字符串的系统的。如果使用MySQL,则必须执行与在Javascript片段中使用字符串不同的转义
所以要回答你的问题,我们需要知道你想如何摆脱你的字符串。在数据库上下文中使用字符串之前,可能不需要对其进行转义。例如,如果您使用,您不需要转义您的值。简短回答,否,除了“clean”的非常具体的定义。现在,您必须使用特定于语言的解决方案——对于SQL,只需使用一条准备好的语句即可 更详细的回答是,最近有一项关于自动字符串清理器的工作,它解决了如何安全、正确地将纯文本内容合并到其他语言的内容中的问题 HTML的自动上下文自动转义器存在于模板语言中,如cTemplates、clearsilver等的变体,希望不久后还有其他语言 目前正在研究如何将其推广到其他语言中。我正在研究的一个想法是使用一个注释语法来描述SQL这样的目标语言,并找出对于可以用用户数据填充的漏洞需要做什么转义 给出如下语法,其中包括说明数据结构如何映射到语言中的子字符串的注释:
JSONValue := JSONNullLiteral
| JSONBooleanLiteral
| JSONObject
| JSONArray
| JSONString
| JSONNumber ;
JSONObject := @KeyValueMap ([{] JSONMemberList? [}]) ;
JSONMemberList := JSONMember ([,] JSONMemberList)? ;
JSONMember := @Key JSONString [:] @Value JSONValue ;
JSONNullLiteral := @ValueNull "null" ;
JSONBooleanLiteral := @ValueFalse "false" | @ValueTrue "true" ;
JSONArray := @List("[" (JSONValue ([,] JSONValue)*)? "]") ;
JSONString := @String ([\"] JSONStringCharacters? [\"]) ;
JSONNumber := @Number (Sign? (Mantissa Exponent? | Hex)) ;
JSONStringCharacters := JSONStringCharacter JSONStringCharacters? ;
JSONStringCharacter := @Char ([^\"\\\x00-\x1f])
| JSONEscapeSequence ;
JSONEscapeSequence := "\\" @Char [/\\\"]
| @Char{[\x08]} "\\b"
| @Char{[\x0c]} "\\f"
| @Char{[\x0a]} "\\n"
| @Char{[\x0d]} "\\r"
| @Char{[\x09]} "\\t"
| @Char ("\\u" @Scalar (hex hex hex hex)) ;
Mantissa := (Integer ([.] Fraction?) | [.] Fraction) ;
Exponent := [Ee] Sign? decimal+ ;
Integer := [0] | [1-9] [0=9]* ;
Fraction := [0-9]+ ;
Hex := [0] [Xx] hex+ ;
Sign := [+\-] ;
我们可以构建如下所示的状态机:
它将事件序列(start、start_对象、start_键、字符“x”、…)转换为将字符编码到缓冲区的指令
从状态机中,我们还可以生成用于为编码器生成有效代码的指令的通用跟踪,并有望生成上下文分析算法,以确定何时应用哪些编码器
如果这能起作用,它将很容易融入到通用编程语言中,以SQL、HTML、,等等。通过对语言定义的调整,允许execute\u query
在execute\u query(“SELECT*FROM Table WHERE ID=$ID”)
中查找程序员指定内容和注入内容之间的边界,并使用这些边界自动转义注入内容,我们可以让这个习惯用法按照程序员的意愿工作。如果您使用ORM层(这在Java中是常见的做法),甚至只使用带有命名或枚举参数的语句,那么SQL参数的转义将自动为您完成。只要您不是手动将字符串连接在一起以生成查询,您就应该是安全的。另请参见:
JSONValue := JSONNullLiteral
| JSONBooleanLiteral
| JSONObject
| JSONArray
| JSONString
| JSONNumber ;
JSONObject := @KeyValueMap ([{] JSONMemberList? [}]) ;
JSONMemberList := JSONMember ([,] JSONMemberList)? ;
JSONMember := @Key JSONString [:] @Value JSONValue ;
JSONNullLiteral := @ValueNull "null" ;
JSONBooleanLiteral := @ValueFalse "false" | @ValueTrue "true" ;
JSONArray := @List("[" (JSONValue ([,] JSONValue)*)? "]") ;
JSONString := @String ([\"] JSONStringCharacters? [\"]) ;
JSONNumber := @Number (Sign? (Mantissa Exponent? | Hex)) ;
JSONStringCharacters := JSONStringCharacter JSONStringCharacters? ;
JSONStringCharacter := @Char ([^\"\\\x00-\x1f])
| JSONEscapeSequence ;
JSONEscapeSequence := "\\" @Char [/\\\"]
| @Char{[\x08]} "\\b"
| @Char{[\x0c]} "\\f"
| @Char{[\x0a]} "\\n"
| @Char{[\x0d]} "\\r"
| @Char{[\x09]} "\\t"
| @Char ("\\u" @Scalar (hex hex hex hex)) ;
Mantissa := (Integer ([.] Fraction?) | [.] Fraction) ;
Exponent := [Ee] Sign? decimal+ ;
Integer := [0] | [1-9] [0=9]* ;
Fraction := [0-9]+ ;
Hex := [0] [Xx] hex+ ;
Sign := [+\-] ;