关于网站SQL注入的问题,以及解决办法
最近发现我们公司的ASP.NET的代码有拼接SQL语句的习惯!这是非常危险的。以下我举例说明一下
例子1:
statement := "SELECT * from users WHERE name = '" + userName + "'; "
将用户名变量(即username)设置为:
a' or 't'='t,此时原始语句发生了变化:
SELECT * from users WHERE name = 'a' OR 't'='t';
如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值't'='t永远是正确的。
例子2:
a'; DROP TABLE users; SELECT * from data WHERE name LIKE '%
这就将最终的SQL语句变成下面这个样子:
SELECT * from users WHERE name = 'a'; DROP TABLE users; SELECT * from DATA WHERE name LIKE '%';
将会造成数据库表被删除的严重后果。
所以强烈建议大家停止SQL语句拼接(特别是网站应用),采用带参数化存储过程。
对于已经完成的ASP.NET网站应用,设计修改代码太多的,可以考虑加入如下代码处理一下,避免被严重注入攻击。可以通过在Global.asax.cs文件中添加过滤关键字的方法来实现 防止 sql 注入攻击(sql injection),代码如下。
/// <summary>
/// 当有数据时交时,触发事件
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
protected void Application_BeginRequest(Object sender, EventArgs e)
{
//遍历Post参数,隐藏域除外
foreach (string i in this.Request.Form)
{
if (i == "__VIEWSTATE") continue;
this.goErr(this.Request.Form.ToString());
}
//遍历Get参数。
foreach (string i in this.Request.QueryString)
{
this.goErr(this.Request.QueryString.ToString());
}
}
///<summary>
///SQL注入过
相关文档:
关于两表关联的update,但语句怎么写都不正确,老是报错,于是心惊肉跳(就怕不能及时完成操作)去查了一下,NND,原来把SQL写成了在SQL Server下面的特有形式,这种语法在Oracle下面是行不通的,急忙改回来,及时完成了任务。顺便也把查到的SQL帖出来,哪天再忘记了,也好在这里找回来:
update customers a ......
---------数学函数
1.绝对值
S:select abs(-1) value
O:select abs(-1) value from dual
2.取整(大)
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from dual
3.取整(小)
S:select floor(-1.001) value
O:select floor(-1.001) value from dual
4.取整(截取)
S:select cast(-1.002 as int) v ......
首先要有jxl类库。
程序如下:
import java.io.*;
import jxl.*;
public class ExcelToSql {
public static void main(String args[])
{
try
{
Workbook book= Workbook.getWorkbook(new File("D:\\workspaceuse6\\foundation\\test\\com\\gres ......
1.按姓氏笔画排序:
Select * from TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
2.数据库加密:
select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同 encrypt('原始密码')
select pwdencrypt('原始密码')
select pw ......