服務熱線
153 8323 9821
經(jīng)常聽說sql注入式攻擊,其實不是mysql獨有的,所有的數(shù)據(jù)庫都存在注入式攻擊,包括mssql,oracle,db2等。
究竟是什么sql注入式攻擊呢?
其實,它就是攻擊者通過構(gòu)建特殊的sql語句,進行數(shù)據(jù)庫攻擊,實際就是獲取一些信息,或是修改一些數(shù)據(jù),以達到攻擊者目的。
防止攻擊除了我們上次說的php安全之數(shù)據(jù)過濾之外,當然就是我們sql語句的寫法了。
比如一個登錄語句:
select * from user where username= $admin and pwd= $admin
通常我們都是這么寫的是吧!
若是登錄者提交過來的數(shù)據(jù)使我們的sql語句變成了以下形式:
select * from user where username= aa #and pwd= $admin ;
select * from user where username= aa /*and pwd= $admin ;
如果用戶名對了,那是不是也能實現(xiàn)登錄呢?
又如:select * from user where username= aa or 0=0 /*and pwd= $admin ;
就算用戶名不對,也可以登錄了。
但如果我們將我們的語句改成:
select * from user where username= $admin ;
然后從數(shù)據(jù)庫讀出的密碼同,用戶提交過來的密碼比對,是否更加安全一點點呢?
再加上我們的過濾函數(shù)safestr()
function safestr()
{
$re = "/(| %27|;|(%3d)|(|(%28)|)|(%29)|(/*)|(%2f%2a)|(%2a%2f)|+|(%2b)|(<|(%3e)|(%3e)|(--))|[|%5d)/";
if( preg_match( $re ,$username)
{
echo 請不要非法sql注入 ;
exit;
}
else
{
return turn;
}
這也安全也都只是相對安全些,如果相對安全些,那么我們定的程序就更容易攻破一些對吧!
上一篇:取每組前幾條記錄的SQL寫法
下一篇:SQL Group by 用法