查找数据库中的某表某字段中是否有注入脚本

博主分享了如何修复公司网站遭受的SQL注入攻击,并通过分析IIS日志定位问题。此外还提供了一个使用.NET编写的脚本,用于检测数据库中的潜在注入风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天早上起来上网发现公司网站又被注入了,郁闷死了,赶快还原!!!
不过也多亏这注入,让我知道怎么简单的分析IIS日志了,呵呵,原来只要ctrl+f查找20%字符串就行,查到到如下东西:
[quote]
/forum/show.aspx titleid=318&caid=20%20And%20Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00)%20as%20varchar(1))%2Bchar(124)=1 80 - 117.32.250.106 Mozilla/4.0 302 0 0
[/quote]
呵呵,原来show.aspx这个页面没有经过验证,赶快补上。。。
然后自己用.NET做了个检测数据库中的表中的字段中的内容有没有注入脚本的页面,看来以后每天都得要运行这个页面检测一次哦!!!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;

public partial class niunantest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
string sql_tbName =
"SELECT name FROM sysobjects " +
"WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0 " +
"order by name";
// 获取数据库中所有的用户表
DataTable dt_tbName = myClass.myDataGet.getTable(sql_tbName);
foreach (DataRow row in dt_tbName.Rows)
{
string tbName = row["name"].ToString();
string sql_tbColName =
"select column_name,data_type from information_schema.columns " +
"where table_name ='" + tbName + "' ";
// 获取表中所有的字段
DataTable dt_tbColName = myClass.myDataGet.getTable(sql_tbColName);
foreach (DataRow row2 in dt_tbColName.Rows)
{
string tbColName = row2["column_name"].ToString();
string tbColType = row2["data_type"].ToString();

if (tbColType == "char" || tbColType == "nchar" || tbColType == "varchar"
|| tbColType == "nvarchar" || tbColType == "text")
{
string sql_count =
"select COUNT(*) from [" + tbName + "] where [" + tbColName + "] like '%<script%' ";
// 判断该表该字段中是否含有script脚本
int count = int.Parse(myClass.myDataGet.getDataScalar(sql_count).ToString());
if (count > 0)
{
Response.Write(tbName + " 表中的 " + tbColName +
" 字段含有脚本!<br>SQL语句:<span style='color:blue;'>" + HttpUtility.HtmlEncode(sql_count) + "</span><br><br>");
}
}

}
}
}
}

把代码记录下来,以备后用!
前几天申请了制作电子书的,上回发短消息给我说是已经做好了,但是我下载下来的大小却是0KB,不知道是怎么回事哦!!!
### 查询 MySQL 数据库 A 是否存在字段 B 的方法 在 Unity 中连接到 MySQL 数据库并执行 SQL 查询来判断某个是否存在特定列,可以通过以下方式实现: #### 使用 INFORMATION_SCHEMA.COLUMNS MySQL 提供了一个名为 `INFORMATION_SCHEMA.COLUMNS` 的元数据,可以用来查询数据库中的所有列信息。通过编写一个 SELECT 查询语句,可以从该查找目标和列的信息。 以下是具体的 SQL 查询语法: ```sql SELECT COUNT(*) AS ColumnExists FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'A' AND COLUMN_NAME = 'B'; ``` 如果返回的结果为 1,则 A 存在字段 B;如果返回的结果为 0,则示不存在该字段[^1]。 #### 在 Unity 中实现此功能 为了在 Unity 中运行上述查询,需要借助第三方插件(如 **MySql.Data** 或其他支持 MySQL 连接的库)。下面是一个完整的 C# 脚本示例,展示如何检查指定是否有某列: ```csharp using UnityEngine; using MySql.Data.MySqlClient; public class CheckColumnExistence : MonoBehaviour { void Start() { string connectionString = "Server=your_server;Database=your_database;Uid=your_username;Pwd=your_password;"; using (var connection = new MySqlConnection(connectionString)) { try { connection.Open(); // 构建查询语句 string query = @" SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName AND COLUMN_NAME = @columnName"; using (var command = new MySqlCommand(query, connection)) { command.Parameters.AddWithValue("@tableName", "A"); command.Parameters.AddWithValue("@columnName", "B"); int count = Convert.ToInt32(command.ExecuteScalar()); if (count > 0) Debug.Log("Table A contains column B."); else Debug.Log("Table A does not contain column B."); } } catch (Exception e) { Debug.LogError($"Error checking column existence: {e.Message}"); } } } } ``` 在此脚本中,我们使用了参数化的查询以防止 SQL 注入攻击,并利用 `ExecuteScalar()` 方法获取单个值作为结果。当计数值大于零时,说明目标列存在于指定中[^2]。 #### 注意事项 - 需要确保已安装适用于 .NET 的 MySQL Connector/Net 库。 - 替换 `connectionString` 变量中的占位符为你自己的数据库配置详情。 - 如果遇到权限错误,请确认当前用户具有访问 `INFORMATION_SCHEMA` 的适当权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值