程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP等語言SQL注入的問題

PHP等語言SQL注入的問題

編輯:PHP綜合

很多人在做開發的時候並沒有注意到SQL的查詢是可以被改掉的,其實SQL卻是最不安全的因素之一,通過SQL,更有可能去直接執行系統命令,在服務器上新建用戶,修改密碼等操作也不是不可能。

直接 SQL 命令注入就是攻擊者常用的一種創建或修改已有 SQL 語句的技術,從而達到取得隱藏數據,或覆蓋關鍵的值,甚至執行數據庫主機操作系統命令的目的。這是通過應用程序取得用戶輸入並與靜態參數組合成 SQL 查詢來實現的。

$offset = $argv[0]; // 注意,沒有輸入驗證!
$query  = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";
$result = pg_query($conn, $query);

這是最普通的分頁例子,但是如果有人把下面的語句通過unlencecode()編碼以後,

0;
insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
    select 'crack', usesysid, 't','t','crack'
    from pg_shadow where usename='postgres';
--

再把這語句插入到url以後.就會在數據的表中插入一個用戶(通過字段猜測,不過肯定是插入數據了)

注意那個 0; 只不過是為了提供一個正確的偏移量以便補充完整原來的查詢,使它不要出錯而已。 ,這個是手冊上的例子

$query  = "SELECT id, name, inserted, size FROM products
                  WHERE size = '$size'
                  ORDER BY $order LIMIT $limit, $offset;";
$result = odbc_exec($conn, $query);

可以在原來的查詢的基礎上添加另一個 SELECT 查詢來獲得密碼:

'
union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable;
--

再比如:

<?php
$query  = "SELECT * FROM products WHERE id LIKE '%$prod%'";
$result = mssql_query($query);
?>

如果攻擊提交 a%' exec master..xp_cmdshell 'net user test testpass /ADD' -- 作為變量 $prod的值,那麼 $query 將會變成

<?php
$query  = "SELECT * FROM products
                    WHERE id LIKE '%a%'
                    exec master..xp_cmdshell 'net user test testpass /ADD'--";
$result = mssql_query($query);
?>

有人說以上的攻擊必須得知道數據表的結構等阿,但是沒人能保證他們獲取不到這些信息阿,不管通過猜測還是,比如用戶表最常用的就是user,admin表,什麼節點表access啊,不是沒有可能

而且還有通過修改form表單,添加隱藏域的方法來提交表單,asp的更恐怖, 通過sql注入來猜測數據庫語句之類的,而mysql中sql語言不對會報錯,不過,依然不要相信別人輸入的數據。

最好對每個客戶端發送的數據進行嚴格的檢查過濾。以保證網站的安全。而且,可以的話,最好建立一個日志系統,方便你查看網站是否沒入侵過。

PHP中免費的開源產品,如dede,帝國,dz,ecshop等,使用者不再少數!不過,越是開源的產品越危險!因為別人很容易就很獲取到你的數據庫結構,網站目錄結構!網站所有代碼!攻擊網站也輕而易舉:

舉例說明,dedeV5.7的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved