php pdo防sql注入原理 php連線池

2021-09-19 05:30:48 字數 1403 閱讀 1343

pdotest.php

class pdotest()

function test()

}$pdotest = new pdotest();

$pdotest->test();

訪問:

http://localhost/pdotest.php
狀態:方式

一、方式二都正常

訪問:

http://localhost/pdotest.php?username=tomener' or 1=1;--

http://localhost/pdotest.php?username=tomener%27%20or%201=1;--

狀態:方式一返回false,方式二返回user表所有資料

mysql預處理語句,mysql支援預處理,sql已經預編譯好了,坑已經挖好了,來乙個填乙個,不會改變原本sql的意思,那麼後面的or 1=1;--根本不會被mysql編譯成執行計畫,被當作普通的字串處理,沒任何意義。

通俗的理解,就像是填空題,你只能在括號裡面填寫內容,並且這句話是預知的,如果這句話的意思都變了,那麼就出現異常了,當然這樣的理解不準確

獲取姓名是()並且狀態為()的使用者,

如果是sql注入,那麼就變成,

獲取姓名是()或者所有使用者

顯然,這和我們預先設定的意思是不一樣的

程式使用持久連線(pdo::attr_persistent)訪問資料庫,則乙個php-fpm工作程序對應乙個到mysql的長連線.

請求結束後,php不會釋放到mysql的連線,以便下次重用,這個過程對程式是透明的.

這可以看作是php-fpm維護的"資料庫連線池".

假如你的伺服器有12個核心(超執行緒),你開啟24個php-fpm工作程序.需要注意的是,php-fpm的程序數pm.max_children不要多於mysql的最大連線數max_connections(預設151)

<?php

'db_host' => '127.0.0.1',

'db_username' => 'root',

'db_password' => '',

'db_name' => 'mybase',

'db_port' => 3306,

'db_pconnect' => true

); pdo::attr_emulate_prepares => false,

pdo::mysql_attr_init_command => 'set names utf8'

));

具體參考: 基於swoole擴充套件實現真正的php資料庫連線池

參考文件:引數化查詢為什麼能夠防止sql注入

PHP PDO 防止SQL注入

使用pdo的好處 1 防止sql注入 2 提高執行效率 每條sql執行前,mysql資料庫都需要先進行編譯 即便是乙個空格也可能引起重新編譯 在迴圈執行多條資料時,使用prepare方式傳入不同引數可以減少編譯時間 大部分常見資料庫都支援prepare語句,即便資料庫不支援,pdo也會採用模擬的方式...

防SQL注入

這段 有好處也有壞處,用的時候得小心,搞不好就會跳進錯誤 dimsql injdata sql injdata and exec insert select delete update chr mid master truncate char declare sql inj split sql in...

防SQL注入

1.必須認定使用者輸入的資料都是不安全的 使用者輸入的資料進行過濾處理 if preg match w get username matches else 讓我們看下在沒有過濾特殊字元時,出現的sql情況 設定 name 中插入了我們不需要的sql語句 name qadir delete from ...