導航:首頁 > 編程語言 > phpmysql函數注入

phpmysql函數注入

發布時間:2022-07-27 20:54:45

1. 如何將php自定義函數值插入mysql

改成這樣:
mysql_query("INSERT INTO c (d) VALUES (".a(5).")",$conn);

2. 求一段php防mysql注入病毒代碼。

//POST過濾安全
$_POST=check_input($_POST);
function check_input($value)
{
if(get_magic_quotes_gpc()){
$value = htmlspecialchars(trim($value));

} else {
$value = addslashes(htmlspecialchars(trim($value)));
}
return $value;
}
另一種如下:PHP整站防注入程序,需要在公共文件中require_once本文件
<?PHP
//判斷magic_quotes_gpc狀態
if (@get_magic_quotes_gpc ()) {
$_GET = sec ( $_GET );
$_POST = sec ( $_POST );
$_COOKIE = sec ( $_COOKIE );
$_FILES = sec ( $_FILES );
}
$_SERVER = sec ( $_SERVER );
function sec(&$array) {
//如果是數組,遍歷數組,遞歸調用
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = sec ( $v );
}
} else if (is_string ( $array )) {
//使用addslashes函數來處理
$array = addslashes ( $array );
} else if (is_numeric ( $array )) {
$array = intval ( $array );
}
return $array;
}
//整型過濾函數
function num_check($id) {
if (! $id) {
die ( '參數不能為空!' );
} //是否為空的判斷
else if (inject_check ( $id )) {
die ( '非法參數' );
} //注入判斷
else if (! is_numetic ( $id )) {
die ( '非法參數' );
}
//數字判斷
$id = intval ( $id );
//整型化
return $id;
}
//字元過濾函數
function str_check($str) {
if (inject_check ( $str )) {
die ( '非法參數' );
}
//注入判斷
$str = htmlspecialchars ( $str );
//轉換html
return $str;
}
function search_check($str) {
$str = str_replace ( "_", "\_", $str );
//把"_"過濾掉
$str = str_replace ( "%", "\%", $str );
//把"%"過濾掉
$str = htmlspecialchars ( $str );
//轉換html
return $str;
}
//表單過濾函數
function post_check($str, $min, $max) {
if (isset ( $min ) && strlen ( $str ) < $min) {
die ( '最少$min位元組' );
} else if (isset ( $max ) && strlen ( $str ) > $max) {
die ( '最多$max位元組' );
}
return stripslashes_array ( $str );
}
//防注入函數
function inject_check($sql_str) {
return eregi ( 'select|inert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile', $sql_str );

}
function stripslashes_array(&$array) {
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = stripslashes_array ( $v );
}
} else if (is_string ( $array )) {
$array = stripslashes ( $array );
}
return $array;
}
?>

3. 關於PHP的mysql函數的mysql_insert_id()問題

mysql_insert_id()函數獲取的是資料庫表中存儲的最有一個索引值

這個最後一個索引值是指最後記錄的索引值,比如資料庫里有1,2,4,5個數據,我添加了索引值為3的數據,那麼資料庫表記錄的索引值就為3

因為這一機制,就有可能在大量用戶並發操作時引發數據混亂。

因此建議,如果用戶數據量不是很大,可以使用這個函數獲取插入數據ID。如果用戶數據量很大,那麼建議就在寫一條查詢語句獲取剛插入的數據

4. 如何預防PHP MYSQL注入【攻擊】

補充:
對於16進制入侵還沒確切防禦手段,只能自己手動查有沒有被入侵這樣
你可以用javascript做客戶端限制輸入數據,治標不治本而已,填用戶名的表單用username做name

function validate(){
var username = $("#username").val();
if (username.match(/[^a-zA-Z0-9]/) || username.length < 3)
{
alert('Invalid username: \'' + username+'\'' );
return false;
}
}

-------------------------------------------------------
php 漏洞已經相對很少了,告訴你個簡單的預防單引號的方法

寫下這個function

function sql_quote( $value )
{
if( get_magic_quotes_gpc() )
{
$value = stripslashes( $value );
}
if( function_exists( "mysql_real_escape_string" ) )
{
$value = mysql_real_escape_string( $value );
}
else
{
$value = addslashes( $value );
}
return $value;
}

然後寫sql的時候這么寫
$username = $_POST['username'];

query = "SELECT * FROM users WHERE username='".sql_quote($username) . "'";

如果有注入攻擊的話必定用到單引號
//沒有用sql_quote的sql語言

query = "SELECT * FROM users WHERE username='' OR '1'='1'";

//用了的,單引號就被避免了

query = "SELECT * FROM users WHERE username='\' OR \'1\'=\'1'";

5. php程序員面試題,mysql怎麼防止注入

php程序員面試題,mysql怎麼防止注入
引發
SQL
注入攻擊的主要原因,是因為以下兩點原因:

1. php 配置文件 php.ini 中的 magic_quotes_gpc選項沒有打開,被置為 off

2. 開發者沒有對數據類型進行檢查和轉義

6. 怎樣用PHP中的MySQL操作函數

1. 建立MySQL 連接:mysql_connect
resource mysql_connect([string $server[, string $username [, string $password [, bool $new_link [, int $client flags]]]]])
打開或重復使用一個到MySQL伺服器的連接。其中,server代表MySQL伺服器,可以包括埠號,例如「hostname:port」。username和password分別代表登錄MySQL伺服器使用的用戶名和密碼。
2. 選擇 MySQL 資料庫:mysql_select_db
bool mysql_select_db(string $database_name[, resource $link_identifier])
設定與指定的連接標識符所關聯的伺服器上的當前資料庫。如果沒有指定連接標識符,則使用上一個打開的連接。如果沒有打開的連接,本函數將無參數地調用mysql_connect()來嘗試打開一個資料庫連接。如果成功則返回true,失敗則返回false。每個其後的mysgl_query()調用都會作用於活動資料庫。
3. 執行查詢:mysql_query
resource mysql_query(string $query[, resource $link_identifier])
向與指定的連接標識的關聯的伺服器中的當前活動資料庫發送一條查詢。如果沒有指定 link_identifier,則使用上一個打開的連接。如果沒有打開的連接,本函數會嘗試無參數地調用mysql_connect()函數來建立一個連接,查詢結果會被緩存。mysql_query()僅對SELECT、SHOW、EXPLAIN或DESCRIBE語句返回一個資源標識符,如果查詢執行不正確則返回false。對於其他類型的SQL語句,mysgl_query()在執行成功時返回true,出錯時返回false。非false的返回值意味著查詢是合法的並能夠被伺服器執行但是並不說明任何影響到的或返回的行數。因為一條查詢執行成功了但並未影響到或並未返回任何行的情況是可能發生的。
4. 從結果集中取得一行作為枚舉數組:mysql_fetch_row
array mysql_fetch_row(resource $result)
從和指定的結果標識關聯的結果集中取得一行數據並作為數組返回。每個結果的列儲存在一個索引數組的單元中,偏移量從0開始。依次調用mysql_fetch_row()將返回結果集中的下一行,如果沒有更多行則返回false。
5. 從結果集中取得一行作為關聯數組,或數字數組,或二者兼有:mysql_fetch_array
array mysql_fetch_array(resource $result[, int $result_type])
mysql_fetch_row()的擴展版本。除了將數據以數字索引方式儲存在數組中之外,還可以將數據作為關聯索引儲存,用欄位名作為鍵名。如果結果中出現欄位名重名的現象,最後一列將優先。要訪問同名的其他列,必須用該列的數字索引或給該列起個別名。對有別名的列,用別名來訪問其內容。
6. 關閉 MySQL 連接:mysql_close
bool mysql_close([resource $link_identifier])
mysql_close()關閉指定的連接標識所關聯的到MySQL伺服器的非持久連接。如果沒有指定link_identifier,則關閉上一個打開的連接。
例PHP中使用MySQL資料庫(mysql.php)
<?php//連接MySQL資料庫
mysql_connect('localhost', 'root', '123');
//選擇當前資料庫
//等效為執行USE test
mysql_select_db('test');
//在當前資料庫執行SQL語句
$query = "SELECT * FROM students";
$result = mysql_query($query);
//操作上次查詢返回的結果集,注意$result變數一般是需要的
while($student = mysql_fetch_array($result)) {
echo '<pre>';
print_r($student);
echo '</pre>';
}
?>

7. PHP中的一些MySQL函數

mysql可通過兩種方式通過php與web相連,一種通過php的mysql相關函數,相關函數如下:
MYSQL函數
mysql_affected_rows:
得到
MySQL
最後操作影響的列數目。
mysql_close:
關閉
MySQL
伺服器連線。
mysql_connect:
開啟
MySQL
伺服器連線。
mysql_create_db:
建立一個
MySQL
新資料庫。
mysql_data_seek:
移動內部傳回指標。
mysql_db_query:
送查詢字串
(query)

MySQL
資料庫。
mysql_drop_db:
移除資料庫。
mysql_errno:
傳回錯誤訊息代碼。
mysql_error:
傳回錯誤訊息。
mysql_fetch_array:
傳回陣列資料。
mysql_fetch_field:
取得欄位資訊。
mysql_fetch_lengths:
傳回單列各欄資料最大長度。
mysql_fetch_object:
傳回物件資料。
mysql_fetch_row:
傳回單列的各欄位。
mysql_field_name:
傳回指定欄位的名稱。
mysql_field_seek:
設定指標到傳回值的某欄位。
mysql_field_table:
獲得目前欄位的資料表
(table)
名稱。
mysql_field_type:
獲得目前欄位的型態。
mysql_field_flags:
獲得目前欄位的旗標。
mysql_field_len:
獲得目前欄位的長度。
mysql_free_result:
釋放傳回佔用記憶體。
mysql_insert_id:
傳回最後一次使用
INSERT
指令的
ID。
mysql_list_fields:
列出指定資料表的欄位
(field)。
mysql_list_dbs:
列出
MySQL
伺服器可用的資料庫
(database)。
mysql_list_tables:
列出指定資料庫的資料表
(table)。
mysql_num_fields:
取得傳回欄位的數目。
mysql_num_rows:
取得傳回列的數目。
mysql_pconnect:
開啟
MySQL
伺服器長期連線。
mysql_query:
送出一個
query
字串。
mysql_result:
取得查詢
(query)
的結果。
mysql_select_db:
選擇一個資料庫。

mysql_tablename:
取得資料表名稱。

8. PHP中的資料庫Mysql有沒有注入的危險

只要是 web開發 都有注入的危險,至於PHP能不能連接SQLserver,答案是可以,但是很麻煩,具體參考 blog.csdn.net/gumanren/archive/2009/10/15/4673674.aspx

9. 關於php連接mysql函數

由於沒有看到完整的代碼,僅就看到的代碼試作解答如下:

1. Notice: Undefined variable: db in C:\xampp\htdocs\shop\files\mysql.php on line 5
警告:未字義的變數db(第5行不太清楚是哪行代碼)。

這個錯誤提示,從已知的代碼來看,其原因應該是你在函數體里引用了一個函數體外定義的變數(db),從代碼看其實就是沒有注意到, 對於變數 作用域范圍(全局、局部)錯誤應用的問題。

簡單的說,函數 select_mycx 里找不到 db。

解決辦法:

(1). 用參數傳遞進去。

function select_mycx($table,$by,$select_str,$number,$db)
{
.....
}

(2). 在參數體里定義全局變數引用:

function select_mycx($table,$by,$select_str,$number)
{
global $db;

....
}

2.Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\shop\files\mysql.php on line 5

這個錯誤實際上是上面的錯誤引起的,因為$db沒有正確引入,所以再 query 當然不能正確執行。

閱讀全文

與phpmysql函數注入相關的資料

熱點內容
正宗溯源碼大燕條一克一般多少錢 瀏覽:913
電腦感染exe文件夾 瀏覽:914
wpsppt怎麼轉pdf格式 瀏覽:86
騰訊文檔在線編輯怎麼添加密碼 瀏覽:868
本地不能訪問伺服器地址 瀏覽:865
訪問伺服器命令 瀏覽:835
華為雲伺服器分銷商 瀏覽:954
Linux定位內存泄露 瀏覽:198
工程加密狗視頻 瀏覽:720
不在內網怎麼連接伺服器 瀏覽:664
雲伺服器app安卓下載 瀏覽:966
如何查看linux伺服器的核心數 瀏覽:137
交易平台小程序源碼下載 瀏覽:148
程序員記筆記用什麼app免費的 瀏覽:646
java與單片機 瀏覽:897
伺服器內網如何通過公網映射 瀏覽:478
程序員穿越到宋代 瀏覽:624
怎麼使用雲伺服器掛游戲 瀏覽:618
真實的幸福pdf 瀏覽:345
d盤php調用c盤的mysql 瀏覽:266