### JAVA中防止SQL注入攻击类的源代码解析 #### 一、概述 SQL注入是一种常见的安全漏洞,通过这种攻击方式,攻击者可以在应用程序发送到数据库的SQL语句中插入恶意代码,进而执行非授权操作,如修改数据或窃取敏感信息。在本篇文章中,我们将分析一个用于JAVA中的防止SQL注入攻击的类——`StringUtils`,该类包含了用于过滤用户输入以防止SQL注入的功能,并且还提供了一些辅助方法来增强应用的安全性。 #### 二、源代码解析 ##### 1. **HTML实体编码** 在网页端,通过使用JavaScript函数`IsValid`来进行输入验证。此函数使用正则表达式`/select|update|delete|exec|count|'|"|=|;|>|<|%/i`来检测用户输入是否包含潜在的SQL关键词或其他特殊字符。如果发现匹配项,则弹出警告并清空输入字段,以此防止潜在的SQL注入攻击。 ```javascript function IsValid(oField) { re = /select|update|delete|exec|count|'|"|=|;|>|<|%/i; $sMsg = "请输入合法的SQL关键字!"; if (re.test(oField.value)) { alert($sMsg); oField.value = ''; oField.focus(); return false; } } ``` ##### 2. **JAVA端过滤实现** 在JAVA端,`cn.com.hbivt.util.StringUtils`类实现了多个过滤方法。 - **HTML实体编码转换**:定义了`FilterChars`数组,用于将特定的字符转换为其对应的HTML实体表示,从而避免XSS攻击。 - `<` 转换为 `<` - `>` 转换为 `>` - 空格转换为 ` ` - `"` 转换为 `"` - `&` 转换为 `&` - `/` 转换为 `/` - `\` 转换为 `\` - `\n` 转换为 `<br>` - **JavaScript转义**:`FilterScriptChars`数组用于处理可能出现在JavaScript字符串中的特殊字符,确保它们被正确转义。 - `\n` 转换为 `'\'+\'\\n\'+\'` - `\r` 转换为 `''` - `\\` 转换为 `'\'+\'\\\\\'+\'` - `'` 转换为 `'\'+\'\\\'\'+\'` - **字符串连接**:`stringConnect`方法用于将字符串数组连接成一个字符串,同时插入指定的分隔符。 - **字符串过滤**:`stringFilter`方法用于过滤字符串中的特殊字符,通过遍历`FilterChars`数组进行替换。 - **JavaScript字符过滤**:`stringFilterScriptChar`方法专门用于过滤JavaScript中的特殊字符,确保字符串可以安全地嵌入到JavaScript代码中。 - **字符串分割**:`stringSpilit`方法用于根据指定的分隔符将字符串分割成字符串数组。 #### 三、实战应用 为了更好地理解这些方法的实际应用,我们可以考虑以下场景: 假设有一个登录表单,其中包含用户名和密码两个字段。为了避免SQL注入攻击,我们需要对用户的输入进行严格的检查。此时,我们可以使用`IsValid`函数来检查前端的输入是否合法;在后端处理登录逻辑时,则可以利用`StringUtils`类中的`stringFilter`方法来过滤掉可能的恶意输入。 例如,在接收前端传递过来的用户名和密码后,可以调用`stringFilter`方法: ```java String username = request.getParameter("username"); String password = request.getParameter("password"); username = StringUtils.stringFilter(username); password = StringUtils.stringFilter(password); ``` 这样,即使用户尝试输入恶意SQL代码,也会被有效地过滤掉,从而大大降低了SQL注入的风险。 #### 四、总结 通过上述分析可以看出,`StringUtils`类及其提供的功能对于保护JAVA应用程序免受SQL注入攻击具有重要作用。通过对用户输入的有效过滤,可以极大地提升系统的安全性。此外,结合前后端的双重防护机制,可以进一步加强防御措施,确保数据的安全性。
防止SQL注入的Javascript代码::::
前端处理::::
<SCRIPT language="JavaScript">
function Check(theform)
{
if (theform.UserName.value=="")
{
alert("请输入用户名!")
theform.UserName.focus();
return (false);
}
if (theform.Password.value == "")
{
alert("请输入密码!");
theform.Password.focus();
return (false);
}
}
function IsValid( oField )
{
re= /select|update|delete|exec|count|'|"|=|;|>|<|%/i;
$sMsg = "请您不要在参数中输入特殊字符和SQL关键字!"
if ( re.test(oField.value) )
{
alert( $sMsg );
oField.focus();
return false;
}
}
</SCRIPT>
后台处理::::
Java代码
JAVA-字符串过滤类
package cn.com.hbivt.util;
/**
* @author not attributable
* @version 1.0
*/
public class StringUtils {
//过滤通过页面表单提交的字符
private static String[][] FilterChars={{"<","<"},{">",">"},{" "," "},{"\"","""},{"&","&"},
{"/","/"},{"\\","\"},{"\n","<br>"}};
//过滤通过javascript脚本处理并提交的字符
private static String[][] FilterScriptChars={{"\n","\'+\'\\n\'+\'"},
{"\r"," "},{"\\","\'+\'\\\\\'+\'"},
{"\'","\'+\'\\\'\'+\'"}};
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
- 3
- 4
前往页