sql注入之php,SQL注入之Mysql注入姿勢及繞過總結

本文目錄一覽:

PHP如何注入SQL語句

SQL注入,如前人所說,最簡單是’,或者是在地址欄後如?page=2 這時加and 1=1,沒反應再加and 1=2,如果報錯,便可注入。你可以用SQL注入工具,黑客論壇上都有,什麼阿D,明小子,穿山甲等。防範措施是對傳遞參數進行轉換類型,如int。

php防止sql注入以及xss跨站腳本攻擊

1.post數據

封裝轉義函數 防sql注入  eag:addslashes($username);addslashes($password); 

eag:防止sql注入函數封裝 

function deepslashes($data){

#判斷$data的表現形式 並且需要處理空的情況

if(empty($data)){

return($data);

}

#高級簡寫 return is_array($data) ? array_map(‘deepslashes’,$data) : addslashes($data);

#初級寫法

if(is_array($data)){

#遞歸循環遍歷處理多維數組

foreach ($data as $v) {

return deepslashes($v);

}

}else{

#單一變數

return addslashes($data);

}

#初級寫法

}

2.get數據

指url 傳參數導致sql發生改變

解決方案

①強制轉換,使用函數intval 或者 數據類型 的關鍵字int

②隱式轉換,通過運算,只需要+0即可

3.xss跨站腳本攻擊

指惡意攻擊向web頁面插入html、js標籤導致頁面出現錯誤

解決方案

轉義標籤” ”即可,有以下php函數可解決

htmlspecialchars 函數 和 htmlentites函數

eag:

function deepslashes($data){

#判斷$data的表現形式 並且需要處理空的情況

if(empty($data)){

return($data);

}

return is_array($data) ? array_map(‘deepslashes’,$data) : htmlspecialchars ($data);

}

php如何防止sql注入

PHP防止sql注入是一個比較低級的問題了,這個問題其實在我大一上學期做第一個個人博客的時候就已經關注過了,不過簡單的說一下關於PHP防注入的方式吧。

使用PDO防注入。

這是最簡單直接的一種方式,當然低版本的PHP一般不支持PDO方式去操作,那麼就只能採用其它方式。

採用escape函數過濾非法字元。

escape可以將非法字元比如 斜杠等非法字元轉義,防止sql注入,這種方式簡單粗暴,但是不太建議這麼用。

自己手寫過濾函數,手寫一個php sql非法參數過濾函數來說還是比較簡單的,但是你的函數需要非常的健壯,不讓仍然有可能被非法黑客攻擊;你的Coding水平直接決定了你的函數的健壯性。

各種框架裡面其實都有對於非法字元過濾的支持,最簡單的比如ThinkPHP,你可以直接防止注入。

寫一個PHP擴展對於進入參數進行有選擇的過濾。 開發一個PHP擴展是對於一個PHP高級程序員必備的技能,將你需要的功能打包在PHP擴展裡面,就像黑詞過濾一樣進行檢查,是非常方便的。一般都是用在自己寫框架路由器轉發的時候,如果你用擴展實現框架的路由器轉發的話,可以順便將參數過濾加入到PHP擴展裡面,通過C去實現。

對於現在的防注入技術其實已經成熟了,對於一個站點該關心的不是防注入了,而是大規模高並發如何處理的問題,或者關於各種其他漏洞,比如現在世界上仍然有百分之80使用redis的站點存在redis漏洞,通過redis漏洞可以直接拿到機器的訪問許可權,一般來說都是直接給你種一個挖礦機器人來。

PHP網站怎麼sql注入?有沒有破解防禦的方法?

網站的運行安全肯定是每個站長必須考慮的問題,大家知道,大多數黑客攻擊網站都是採用sql注入,這就是我們常說的為什麼最原始的靜態的網站反而是最安全的。 今天我們講講PHP注入的安全規範,防止自己的網站被sql注入。

如今主流的網站開發語言還是php,那我們就從php網站如何防止sql注入開始說起:

Php注入的安全防範通過上面的過程,我們可以了解到php注入的原理和手法,當然我們也同樣可以制定出相應該的防範方法:

首先是對伺服器的安全設置,這裡主要是php+mysql的安全設置和linux主機的安全設置。對php+mysql注射的防範,首先將magic_quotes_gpc設置為On,display_errors設置為Off,如果id型,我們利用intval()將其轉換成整數類型,如代碼:

$id=intval($id);

mysql_query=」select *from example where articieid=』$id』」;或者這樣寫:mysql_query(」SELECT * FROM article WHERE articleid=」.intval($id).」”)

如果是字元型就用addslashes()過濾一下,然後再過濾」%」和」_」如:

$search=addslashes($search);

$search=str_replace(「_」,」\_」,$search);

$search=str_replace(「%」,」\%」,$search);

當然也可以加php通用防注入代碼:

/*************************

PHP通用防注入安全代碼

說明:

判斷傳遞的變數中是否含有非法字元

如$_POST、$_GET

功能:

防注入

**************************/

//要過濾的非法字元

$ArrFiltrate=array(」『」,」;」,」union」);

//出錯後要跳轉的url,不填則默認前一頁

$StrGoUrl=」”;

//是否存在數組中的值

function FunStringExist($StrFiltrate,$ArrFiltrate){

foreach ($ArrFiltrate as $key=$value){

if (eregi($value,$StrFiltrate)){

return true;

}

}

return false;

}

//合併$_POST 和 $_GET

if(function_exists(array_merge)){

$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);

}else{

foreach($HTTP_POST_VARS as $key=$value){

$ArrPostAndGet[]=$value;

}

foreach($HTTP_GET_VARS as $key=$value){

$ArrPostAndGet[]=$value;

}

}

//驗證開始

foreach($ArrPostAndGet as $key=$value){

if (FunStringExist($value,$ArrFiltrate)){

echo 「alert(/」Neeao提示,非法字元/」);」;

if (empty($StrGoUrl)){

echo 「history.go(-1);」;

}else{

echo 「window.location=/」”.$StrGoUrl.」/」;」;

}

exit;

}

}

?

/*************************

保存為checkpostandget.php

然後在每個php文件前加include(「checkpostandget.php「);即可

**************************/

另外將管理員用戶名和密碼都採取md5加密,這樣就能有效地防止了php的注入。

還有伺服器和mysql也要加強一些安全防範。

對於linux伺服器的安全設置:

加密口令,使用「/usr/sbin/authconfig」工具打開密碼的shadow功能,對password進行加密。

禁止訪問重要文件,進入linux命令界面,在提示符下輸入:

#chmod 600 /etc/inetd.conf //改變文件屬性為600

#chattr +I /etc/inetd.conf //保證文件屬主為root

#chattr –I /etc/inetd.conf // 對該文件的改變做限制

禁止任何用戶通過su命令改變為root用戶

在su配置文件即/etc/pam.d/目錄下的開頭添加下面兩行:

Auth sufficient /lib/security/pam_rootok.so debug

Auth required /lib/security/pam_whell.so group=wheel

刪除所有的特殊帳戶

#userdel lp等等 刪除用戶

#groupdel lp等等 刪除組

禁止不使用的suid/sgid程序

#find / -type f \(-perm -04000 – o –perm -02000 \) \-execls –lg {} \;

原創文章,作者:JYJP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133931.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JYJP的頭像JYJP
上一篇 2024-10-04 00:02
下一篇 2024-10-04 00:02

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Hibernate日誌列印sql參數

    本文將從多個方面介紹如何在Hibernate中列印SQL參數。Hibernate作為一種ORM框架,可以通過列印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用SQL實現select 聚合查詢結果前加序號

    select語句是資料庫中最基礎的命令之一,用於從一個或多個表中檢索數據。常見的聚合函數有:count、sum、avg等。有時候我們需要在查詢結果的前面加上序號,可以使用以下兩種方…

    編程 2025-04-29
  • 理解Mybatis中的SQL Limit用法

    Mybatis是一種非常流行的ORM框架,提供了SQL映射配置文件,可以使用類似於傳統SQL語言的方式編寫SQL語句。其中,SQL的Limit語法是一個非常重要的知識點,能夠實現分…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • SQL預研

    SQL預研是指在進行SQL相關操作前,通過數據分析和理解,確定操作的方法和步驟,從而避免不必要的錯誤和問題。以下從多個角度進行詳細闡述。 一、數據分析 數據分析是SQL預研的第一步…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28

發表回復

登錄後才能評論