<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AdminLogin.aspx.cs" Inherits="AdminLogin" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>网站信息管理</title>
<link href="AdminCss/Logincss.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div id="log_fm">
<div class="log_box">
<div class="btn_box">
<div id="tb_1">
<asp:TextBox ID="userName" runat="server" CssClass="tb"></asp:TextBox>
</div>
<div id="tb_2">
<asp:TextBox ID="passWord" runat="server" CssClass="tb" TextMode="Password"></asp:TextBox>
</div>
<div id="tb_3">
<asp:TextBox ID="txtCode" runat="server" CssClass="tb_yz" ></asp:TextBox>
</div>
<div id="yz">
<asp:Image ID="Image1" runat="server" ImageUrl="~/Admin/RandomImage.aspx" />
</div>
<div id="btn_1">
<asp:Button ID="Button1" runat="server" Text="登录" CssClass="btn"
Font-Size="14px" onclick="Button1_Click" />
</div>
<div id="btn_2">
<asp:Button ID="Button2" runat="server" Text="重置" CssClass="btn"
Font-Size="14px" />
</div>
</div>
</div>
</div>
</form>
</body>
</html>
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
public partial class AdminLogin : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string strConnnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
strConnnection += Server.MapPath("~/App_Data/DataMaster.mdb");
OleDbConnection conn = new OleDbConnection(strConnnection);
string cmdText = "SELECT COUNT(*) FROM [Admin] WHERE UserName='" + userName.Text + "' AND userPass='" + passWord.Text + "'";
OleDbCommand cmd = new OleDbCommand(cmdText, conn);
conn.Open();
int count = (int)cmd.ExecuteScalar();
conn.Close();
if (string.Compare(Session["CheckCode"].ToString(), this.txtCode.Text, true) == 0 && count >0)
{
Session["myuser"] = userName.Text;
Response.Write("<script>alert('登录成功!')</script>");
ClientScript.RegisterStartupScript(this.GetType(), "e", "<script>window.location.href='Main.aspx';</script>");
return;
}
else
{
Response.Write("<script>alert('输入错误!')</script>");
ClientScript.RegisterStartupScript(this.GetType(), "e", "<script>window.location.href='AdminLogin.aspx';</script>");
}
}
}
代码如上,主要是防止SQL注入,要求代码可以直接上传服务器使用,不能有语法错误。
还有就是Web.config中 <customErrors mode="On" defaultRedirect="index.aspx"/> 这样设置是不是就不会显示WEB服务器详细的报错页面。谢谢大家。
替换掉单引号
string cmdText = "SELECT COUNT(*) FROM [Admin] WHERE UserName='" + userName.Text.Replace("'","") + "' AND userPass='" + passWord.Text.Replace("'","") + "'";
参数化也可以
protected void Button1_Click(object sender, EventArgs e)
{
string strConnnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
strConnnection += Server.MapPath("~/App_Data/DataMaster.mdb");
OleDbConnection conn = new OleDbConnection(strConnnection);
string cmdText = "SELECT COUNT(*) FROM [Admin] WHERE UserName=? AND userPass=?";
OleDbCommand cmd = new OleDbCommand(cmdText, conn);
//framwork2.0
/*OleDbParameter pUserName = new OleDbParameter("UserName", OleDbType.LongVarWChar,50);
pUserName.Size = 50;
pUserName.Direction = ParameterDirection.Input;
pUserName.Value = userName.Text;
OleDbParameter puserPass = new OleDbParameter("userPass", OleDbType.LongVarWChar, 50);
puserPass.Size = 50;
puserPass.Direction = ParameterDirection.Input;
puserPass.Value = passWord.Text;
cmd.Parameters.Add(pUserName);
cmd.Parameters.Add(puserPass);*/
//对象初始化器需要framework3+以上,如果是2.0版本用上面注释的代码,下面2句的注释掉,要不会出错
cmd.Parameters.Add(new OleDbParameter { ParameterName = "UserName", OleDbType = OleDbType.LongVarWChar, Value = userName.Text,Size=50,Direction=ParameterDirection.Input });
cmd.Parameters.Add(new OleDbParameter { ParameterName = "userPass", OleDbType = OleDbType.LongVarWChar, Value = passWord.Text, Size = 50, Direction = ParameterDirection.Input });
/////////////////////
conn.Open();
int count = (int)cmd.ExecuteScalar();
conn.Close();
if (/*string.Compare(Session["CheckCode"].ToString(), this.txtCode.Text, true) == 0 &&*/ count > 0)
{
Session["myuser"] = userName.Text;
Response.Write("<script>alert('登录成功!')</script>");
ClientScript.RegisterStartupScript(this.GetType(), "e", "<script>window.location.href='Main.aspx';</script>");
return;
}
else
{
Response.Write("<script>alert('输入错误!')</script>");
ClientScript.RegisterStartupScript(this.GetType(), "e", "<script>window.location.href='default.aspx';</script>");
}
}
帮助到你可以采纳支持下哦,谢谢~~实测参数化正常运行
如何有效防止sql注入的五种方式。防止sql注入有很多方面,感觉还是自己多百度,多了解这方面的东西,更有利于你的思路去控制。https://m.jb51.net/article/108987.htm
防止SQL注入,就应该将SQL参数化,而不是直接拼接的方式,参数化的SQL里面值要单独写一个Utils工具类,去筛选掉一些可能有SQL注入的问题,比如Delete等等,给你个例子吧
/*
* *
* * Copyright (c) All rights reserved.
* *
* *
* *
* * 版权所有,侵权必究!
*
*/
package com.ts.core.common.xss;
import com.ts.core.common.exception.RRException;
import org.apache.commons.lang.StringUtils;
/**
* SQL过滤
*
* @author Mark sunlightcs@gmail.com
*/
public class SQLFilter {
/**
* SQL注入过滤
* @param str 待验证的字符串
*/
public static String sqlInject(String str){
if(StringUtils.isBlank(str)){
return null;
}
//去掉'|"|;|\字符
str = StringUtils.replace(str, "'", "");
str = StringUtils.replace(str, "\"", "");
str = StringUtils.replace(str, ";", "");
str = StringUtils.replace(str, "\\", "");
//转换成小写
str = str.toLowerCase();
//非法字符
String[] keywords = {"master", "truncate", "insert", "select", "delete", "update", "declare", "alter", "drop"};
//判断是否包含非法字符
for(String keyword : keywords){
if(str.indexOf(keyword) != -1){
throw new RRException("包含非法字符");
}
}
return str;
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632