91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SQL注入到底是什么詳細(xì)資料講解

Wildesbeast ? 來源:今日頭條 ? 作者:網(wǎng)絡(luò)安全晴雨表 ? 2020-04-06 12:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

先來看一副很有意思的漫畫:

相信大家對(duì)于學(xué)校們?cè)愀獾木W(wǎng)絡(luò)環(huán)境和運(yùn)維手段都早有體會(huì),在此就不多做吐槽了。今天我們來聊一聊SQL注入相關(guān)的內(nèi)容。

1 何謂SQL注入?

SQL注入是一種非常常見的數(shù)據(jù)庫(kù)攻擊手段,SQL注入漏洞也是網(wǎng)絡(luò)世界中最普遍的漏洞之一。大家也許都聽過某某學(xué)長(zhǎng)通過攻擊學(xué)校數(shù)據(jù)庫(kù)修改自己成績(jī)的事情,這些學(xué)長(zhǎng)們一般用的就是SQL注入方法。

SQL注入其實(shí)就是惡意用戶通過在表單中填寫包含SQL關(guān)鍵字的數(shù)據(jù)來使數(shù)據(jù)庫(kù)執(zhí)行非常規(guī)代碼的過程。簡(jiǎn)單來說,就是數(shù)據(jù)「越俎代庖」做了代碼才能干的事情。

這個(gè)問題的來源是,SQL數(shù)據(jù)庫(kù)的操作是通過SQL語(yǔ)句來執(zhí)行的,而無論是執(zhí)行代碼還是數(shù)據(jù)項(xiàng)都必須寫在SQL語(yǔ)句之中,這就導(dǎo)致如果我們?cè)跀?shù)據(jù)項(xiàng)中加入了某些SQL語(yǔ)句關(guān)鍵字(比如說SELECT、DROP等等),這些關(guān)鍵字就很可能在數(shù)據(jù)庫(kù)寫入或讀取數(shù)據(jù)時(shí)得到執(zhí)行。

多言無益,我們拿真實(shí)的案例來說話。下面我們先使用SQLite建立一個(gè)學(xué)生檔案表。

SQL數(shù)據(jù)庫(kù)操作示例:

import sqlite3

連接數(shù)據(jù)庫(kù):

conn = sqlite3.connect('test.db')

建立新的數(shù)據(jù)表:

conn.executescript('''DROP TABLE IF EXISTS students; CREATE TABLE students (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL);''')

插入學(xué)生信息:

students = ['Paul','Tom','Tracy','Lily']for name in students: query = "INSERT INTO students (name) VALUES ('%s')" % (name) conn.executescript(query);

檢視已有的學(xué)生信息:

cursor = conn.execute("SELECT id, name from students")print('IDName')for row in cursor: print('{0}{1}'.format(row[0], row[1]))conn.close()

點(diǎn)擊運(yùn)行按鈕將會(huì)打印目前表中的內(nèi)容。上述程序中我們建立了一個(gè)test.db數(shù)據(jù)庫(kù)以及一個(gè)students數(shù)據(jù)表,并向表中寫入了四條學(xué)生信息。

那么SQL注入又是怎么一回事呢?我們嘗試再插入一條惡意數(shù)據(jù),數(shù)據(jù)內(nèi)容就是漫畫中的"Robert');DROP TABLE students;--",看看會(huì)發(fā)生什么情況。

SQL數(shù)據(jù)庫(kù)注入示例:

conn = sqlite3.connect('test.db')

插入包含注入代碼的信息:

name = "Robert');DROP TABLE students;--"query = "INSERT INTO students (name) VALUES ('%s')" % (name)conn.executescript(query)

檢視已有的學(xué)生信息:

cursor = conn.execute("SELECT id, name from students")print('IDName')for row in cursor: print('{0}{1}'.format(row[0], row[1]))conn.close()

你將會(huì)發(fā)現(xiàn),運(yùn)行后,程序沒有輸出任何數(shù)據(jù)內(nèi)容,而是返回一條錯(cuò)誤信息:表單students無法找到!

這是為什么呢?問題就在于我們所插入的數(shù)據(jù)項(xiàng)中包含SQL關(guān)鍵字DROP TABLE,這兩個(gè)關(guān)鍵字的意義是從數(shù)據(jù)庫(kù)中清除一個(gè)表單。

而關(guān)鍵字之前的Robert');使得SQL執(zhí)行器認(rèn)為上一命令已經(jīng)結(jié)束,從而使得危險(xiǎn)指令DROP TABLE得到執(zhí)行。

也就是說,這段包含DROP TABLE關(guān)鍵字的數(shù)據(jù)項(xiàng)使得原有的簡(jiǎn)單的插入姓名信息的SQL語(yǔ)句:

INSERT INTO students (name) VALUES ('Robert')

變?yōu)榱送瑫r(shí)包含另外一條清除表單命令的語(yǔ)句:

INSERT INTO students (name) VALUES ('Robert');DROP TABLE students;

而SQL數(shù)據(jù)庫(kù)執(zhí)行上述操作后,students表單被清除,因而表單無法找到,所有數(shù)據(jù)項(xiàng)丟失。

2 如何防止SQL注入問題呢?

大家也許都想到了,注入問題都是因?yàn)閳?zhí)行了數(shù)據(jù)項(xiàng)中的SQL關(guān)鍵字,那么,只要檢查數(shù)據(jù)項(xiàng)中是否存在SQL關(guān)鍵字不就可以了么?

的確是這樣,很多數(shù)據(jù)庫(kù)管理系統(tǒng)都是采取了這種看似『方便快捷』的過濾手法,但是這并不是一種根本上的解決辦法,如果有個(gè)美國(guó)人真的就叫做『Drop Table』呢?你總不能逼人家改名字吧。

合理的防護(hù)辦法有很多。首先,盡量避免使用常見的數(shù)據(jù)庫(kù)名和數(shù)據(jù)庫(kù)結(jié)構(gòu)。在上面的案例中,如果表單名字并不是students,則注入代碼將會(huì)在執(zhí)行過程中報(bào)錯(cuò),也就不會(huì)發(fā)生數(shù)據(jù)丟失的情況——SQL注入并不像大家想象得那么簡(jiǎn)單,它需要攻擊者本身對(duì)于數(shù)據(jù)庫(kù)的結(jié)構(gòu)有足夠的了解才能成功,因而在構(gòu)建數(shù)據(jù)庫(kù)時(shí)盡量使用較為復(fù)雜的結(jié)構(gòu)和命名方式將會(huì)極大地減少被成功攻擊的概率。

使用正則表達(dá)式等字符串過濾手段限制數(shù)據(jù)項(xiàng)的格式、字符數(shù)目等也是一種很好的防護(hù)措施。理論上,只要避免數(shù)據(jù)項(xiàng)中存在引號(hào)、分號(hào)等特殊字符就能很大程度上避免SQL注入的發(fā)生。

另外,就是使用各類程序文檔所推薦的數(shù)據(jù)庫(kù)操作方式來執(zhí)行數(shù)據(jù)項(xiàng)的查詢與寫入操作,比如在上述的案例中,如果我們稍加修改,首先使用execute()方法來保證每次執(zhí)行僅能執(zhí)行一條語(yǔ)句,然后將數(shù)據(jù)項(xiàng)以參數(shù)的方式與SQL執(zhí)行語(yǔ)句分離開來,就可以完全避免SQL注入的問題,如下SQL數(shù)據(jù)庫(kù)反注入示例。

conn = sqlite3.connect('test.db')

以安全方式插入包含注入代碼的信息:

name = "Robert');DROP TABLE students;--"query="INSERTINTOstudents(name)VALUES(?)"conn.execute(query, [name])

檢視已有的學(xué)生信息:

cursor = conn.execute("SELECT id, name from students")print('IDName')for row in cursor:print('{0}{1}'.format(row[0],row[1]))conn.close()

而對(duì)于PHP而言,則可以通過mysql_real_escape_string等方法對(duì)SQL關(guān)鍵字進(jìn)行轉(zhuǎn)義,必要時(shí)審查數(shù)據(jù)項(xiàng)目是否安全來防治SQL注入。

當(dāng)然,做好數(shù)據(jù)庫(kù)的備份,同時(shí)對(duì)敏感內(nèi)容進(jìn)行加密永遠(yuǎn)是最重要的。某些安全性問題可能永遠(yuǎn)不會(huì)有完美的解決方案,只有我們做好最基本的防護(hù)措施,才能在發(fā)生問題的時(shí)候亡羊補(bǔ)牢,保證最小程度的損失。

注意:但凡有SQL注入漏洞的程序,都是因?yàn)槌绦蛞邮軄碜钥蛻舳擞脩糨斎氲淖兞炕騏RL傳遞的參數(shù),并且這個(gè)變量或參數(shù)是組成SQL語(yǔ)句的一部分,對(duì)于用戶輸入的內(nèi)容或傳遞的參數(shù),我們應(yīng)該要時(shí)刻保持警惕,這是安全領(lǐng)域里的「外部數(shù)據(jù)不可信任」的原則,縱觀Web安全領(lǐng)域的各種攻擊方式,大多數(shù)都是因?yàn)?a target="_blank">開發(fā)者違反了這個(gè)原則而導(dǎo)致的,所以自然能想到的,就是從變量的檢測(cè)、過濾、驗(yàn)證下手,確保變量是開發(fā)者所預(yù)想的。

1、檢查變量數(shù)據(jù)類型和格式

如果你的SQL語(yǔ)句是類似where id={$id}這種形式,數(shù)據(jù)庫(kù)里所有的id都是數(shù)字,那么就應(yīng)該在SQL被執(zhí)行前,檢查確保變量id是int類型;如果是接受郵箱,那就應(yīng)該檢查并嚴(yán)格確保變量一定是郵箱的格式,其他的類型比如日期、時(shí)間等也是一個(gè)道理??偨Y(jié)起來:只要是有固定格式的變量,在SQL語(yǔ)句執(zhí)行前,應(yīng)該嚴(yán)格按照固定格式去檢查,確保變量是我們預(yù)想的格式,這樣很大程度上可以避免SQL注入攻擊。

比如,我們前面接受username參數(shù)例子中,我們的產(chǎn)品設(shè)計(jì)應(yīng)該是在用戶注冊(cè)的一開始,就有一個(gè)用戶名的規(guī)則,比如5-20個(gè)字符,只能由大小寫字母、數(shù)字以及一些安全的符號(hào)組成,不包含特殊字符。此時(shí)我們應(yīng)該有一個(gè)check_username的函數(shù)來進(jìn)行統(tǒng)一的檢查。不過,仍然有很多例外情況并不能應(yīng)用到這一準(zhǔn)則,比如文章發(fā)布系統(tǒng),評(píng)論系統(tǒng)等必須要允許用戶提交任意字符串的場(chǎng)景,這就需要采用過濾等其他方案了。

2、過濾特殊符號(hào)

對(duì)于無法確定固定格式的變量,一定要進(jìn)行特殊符號(hào)過濾或轉(zhuǎn)義處理。

3、綁定變量,使用預(yù)編譯語(yǔ)句

MySQL的mysqli驅(qū)動(dòng)提供了預(yù)編譯語(yǔ)句的支持,不同的程序語(yǔ)言,都分別有使用預(yù)編譯語(yǔ)句的方法

實(shí)際上,綁定變量使用預(yù)編譯語(yǔ)句是預(yù)防SQL注入的最佳方式,使用預(yù)編譯的SQL語(yǔ)句語(yǔ)義不會(huì)發(fā)生改變,在SQL語(yǔ)句中,變量用問號(hào)?表示,黑客即使本事再大,也無法改變SQL語(yǔ)句的結(jié)構(gòu)

3 什么是sql預(yù)編譯

1.1:預(yù)編譯語(yǔ)句是什么

通常我們的一條sql在db接收到最終執(zhí)行完畢返回可以分為下面三個(gè)過程:

詞法和語(yǔ)義解析、優(yōu)化sql語(yǔ)句,制定執(zhí)行計(jì)劃、執(zhí)行并返回結(jié)果

我們把這種普通語(yǔ)句稱作Immediate Statements。

但是很多情況,我們的一條sql語(yǔ)句可能會(huì)反復(fù)執(zhí)行,或者每次執(zhí)行的時(shí)候只有個(gè)別的值不同(比如query的where子句值不同,update的set子句值不同,insert的values值不同)。

如果每次都需要經(jīng)過上面的詞法語(yǔ)義解析、語(yǔ)句優(yōu)化、制定執(zhí)行計(jì)劃等,則效率就明顯不行了。

所謂預(yù)編譯語(yǔ)句就是將這類語(yǔ)句中的值用占位符替代,可以視為將sql語(yǔ)句模板化或者說參數(shù)化,一般稱這類語(yǔ)句叫Prepared Statements或者Parameterized Statements

預(yù)編譯語(yǔ)句的優(yōu)勢(shì)在于歸納為:一次編譯、多次運(yùn)行,省去了解析優(yōu)化等過程;此外預(yù)編譯語(yǔ)句能防止sql注入。

當(dāng)然就優(yōu)化來說,很多時(shí)候最優(yōu)的執(zhí)行計(jì)劃不是光靠知道sql語(yǔ)句的模板就能決定了,往往就是需要通過具體值來預(yù)估出成本代價(jià)。

1.2:MySQL的預(yù)編譯功能

注意MySQL的老版本(4.1之前)是不支持服務(wù)端預(yù)編譯的,但基于目前業(yè)界生產(chǎn)環(huán)境普遍情況,基本可以認(rèn)為MySQL支持服務(wù)端預(yù)編譯。

下面我們來看一下MySQL中預(yù)編譯語(yǔ)句的使用。

(1)建表 首先我們有一張測(cè)試表t,結(jié)構(gòu)如下所示:

mysql> show create table tG*************************** 1. row *************************** Table: tCreate Table: CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` varchar(20) DEFAULT NULL, UNIQUE KEY `ab` (`a`,`b`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

(2)編譯

我們接下來通過 PREPARE stmt_name FROM preparable_stm的語(yǔ)法來預(yù)編譯一條sql語(yǔ)句

mysql> prepare ins from 'insert into t select ?,?';Query OK, 0 rows affected (0.00 sec)Statement prepared

(3)執(zhí)行

我們通過EXECUTE stmt_name [USING @var_name [, @var_name] ...]的語(yǔ)法來執(zhí)行預(yù)編譯語(yǔ)句

mysql> set @a=999,@b='hello';Query OK, 0 rows affected (0.00 sec) mysql> execute ins using @a,@b;Query OK, 1 row affected (0.01 sec)Records: 1 Duplicates: 0 Warnings: 0 mysql> select * from t;+------+-------+| a | b |+------+-------+| 999 | hello |+------+-------+1 row in set (0.00 sec)

可以看到,數(shù)據(jù)已經(jīng)被成功插入表中。

MySQL中的預(yù)編譯語(yǔ)句作用域是session級(jí),但我們可以通過max_prepared_stmt_count變量來控制全局最大的存儲(chǔ)的預(yù)編譯語(yǔ)句。

mysql> set @@global.max_prepared_stmt_count=1;Query OK, 0 rows affected (0.00 sec) mysql> prepare sel from 'select * from t';ERROR 1461 (42000): Can't create more than max_prepared_stmt_count statements (current value: 1)

當(dāng)預(yù)編譯條數(shù)已經(jīng)達(dá)到閾值時(shí)可以看到MySQL會(huì)報(bào)如上所示的錯(cuò)誤。

(4)釋放

如果我們想要釋放一條預(yù)編譯語(yǔ)句,則可以使用{DEALLOCATE | DROP} PREPARE stmt_name的語(yǔ)法進(jìn)行操作:

mysql> deallocate prepare ins;Query OK, 0 rows affected (0.00 sec)

4 為什么PrepareStatement可以防止sql注入

原理是采用了預(yù)編譯的方法,先將SQL語(yǔ)句中可被客戶端控制的參數(shù)集進(jìn)行編譯,生成對(duì)應(yīng)的臨時(shí)變量集,再使用對(duì)應(yīng)的設(shè)置方法,為臨時(shí)變量集里面的元素進(jìn)行賦值,賦值函數(shù)setString(),會(huì)對(duì)傳入的參數(shù)進(jìn)行強(qiáng)制類型檢查和安全檢查,所以就避免了SQL注入的產(chǎn)生。下面具體分析

(1):為什么Statement會(huì)被sql注入

因?yàn)镾tatement之所以會(huì)被sql注入是因?yàn)镾QL語(yǔ)句結(jié)構(gòu)發(fā)生了變化。比如:

"select*from tablename where username='"+uesrname+ "'and password='"+password+"'"

在用戶輸入'or true or'之后sql語(yǔ)句結(jié)構(gòu)改變。

select*from tablename where username=''or true or'' and password=''

這樣本來是判斷用戶名和密碼都匹配時(shí)才會(huì)計(jì)數(shù),但是經(jīng)過改變后變成了或的邏輯關(guān)系,不管用戶名和密碼是否匹配該式的返回值永遠(yuǎn)為true;

(2)為什么Preparement可以防止SQL注入。

因?yàn)镻reparement樣式為

select*from tablename where username=? and password=?

該SQL語(yǔ)句會(huì)在得到用戶的輸入之前先用數(shù)據(jù)庫(kù)進(jìn)行預(yù)編譯,這樣的話不管用戶輸入什么用戶名和密碼的判斷始終都是并的邏輯關(guān)系,防止了SQL注入

簡(jiǎn)單總結(jié),參數(shù)化能防注入的原因在于,語(yǔ)句是語(yǔ)句,參數(shù)是參數(shù),參數(shù)的值并不是語(yǔ)句的一部分,數(shù)據(jù)庫(kù)只按語(yǔ)句的語(yǔ)義跑,至于跑的時(shí)候是帶一個(gè)普通背包還是一個(gè)怪物,不會(huì)影響行進(jìn)路線,無非跑的快點(diǎn)與慢點(diǎn)的區(qū)別。

5 mybatis是如何防止SQL注入的

1、首先看一下下面兩個(gè)sql語(yǔ)句的區(qū)別:

mybatis中的#和$的區(qū)別:

1、#將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)。

如:where username=#{username},如果傳入的值是111,那么解析成sql時(shí)的值為where username="111", 如果傳入的值是id,則解析成的sql為where username="id".

2、$將傳入的數(shù)據(jù)直接顯示生成在sql中。

如:where username=${username},如果傳入的值是111,那么解析成sql時(shí)的值為where username=111;

如果傳入的值是;drop table user;,則解析成的sql為:select id, username, password, role from user where username=;drop table user;

3、#方式能夠很大程度防止sql注入,$方式無法防止Sql注入。

4、$方式一般用于傳入數(shù)據(jù)庫(kù)對(duì)象,例如傳入表名.

5、一般能用#的就別用$,若不得不使用“${xxx}”這樣的參數(shù),要手工地做好過濾工作,來防止sql注入攻擊。

6、在MyBatis中,“${xxx}”這樣格式的參數(shù)會(huì)直接參與SQL編譯,從而不能避免注入攻擊。但涉及到動(dòng)態(tài)表名和列名時(shí),只能使用“${xxx}”這樣的參數(shù)格式。所以,這樣的參數(shù)需要我們?cè)诖a中手工進(jìn)行處理來防止注入。

【結(jié)論】在編寫MyBatis的映射語(yǔ)句時(shí),盡量采用“#{xxx}”這樣的格式。若不得不使用“${xxx}”這樣的參數(shù),要手工地做好過濾工作,來防止SQL注入攻擊。

mybatis是如何做到防止sql注入的

MyBatis框架作為一款半自動(dòng)化的持久層框架,其SQL語(yǔ)句都要我們自己手動(dòng)編寫,這個(gè)時(shí)候當(dāng)然需要防止SQL注入。其實(shí),MyBatis的SQL是一個(gè)具有“輸入+輸出”的功能,類似于函數(shù)的結(jié)構(gòu),參考上面的兩個(gè)例子。其中,parameterType表示了輸入的參數(shù)類型,resultType表示了輸出的參數(shù)類型。回應(yīng)上文,如果我們想防止SQL注入,理所當(dāng)然地要在輸入?yún)?shù)上下功夫。上面代碼中使用#的即輸入?yún)?shù)在SQL中拼接的部分,傳入?yún)?shù)后,打印出執(zhí)行的SQL語(yǔ)句,會(huì)看到SQL是這樣的:

select id, username, password, role from user where username=? and password=?

不管輸入什么參數(shù),打印出的SQL都是這樣的。這是因?yàn)镸yBatis啟用了預(yù)編譯功能,在SQL執(zhí)行前,會(huì)先將上面的SQL發(fā)送給數(shù)據(jù)庫(kù)進(jìn)行編譯;執(zhí)行時(shí),直接使用編譯好的SQL,替換占位符“?”就可以了。因?yàn)镾QL注入只能對(duì)編譯過程起作用,所以這樣的方式就很好地避免了SQL注入的問題。

【底層實(shí)現(xiàn)原理】MyBatis是如何做到SQL預(yù)編譯的呢?其實(shí)在框架底層,是JDBC中的PreparedStatement類在起作用,PreparedStatement是我們很熟悉的Statement的子類,它的對(duì)象包含了編譯好的SQL語(yǔ)句。這種“準(zhǔn)備好”的方式不僅能提高安全性,而且在多次執(zhí)行同一個(gè)SQL時(shí),能夠提高效率。原因是SQL已編譯好,再次執(zhí)行時(shí)無需再編譯

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    789

    瀏覽量

    46713
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    4020

    瀏覽量

    68365
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    MOS管到底是什么?和三極管、繼電器有什么本質(zhì)區(qū)別?

    MOS管到底是什么?和三極管、繼電器有什么本質(zhì)區(qū)別?在電子設(shè)備的“心臟”部位,藏著許多默默工作的“開關(guān)選手”。它們操控著電流的通斷,決定著設(shè)備的效率與穩(wěn)定性。其中,MOS管作為近年來高頻
    的頭像 發(fā)表于 01-07 13:46 ?556次閱讀
    MOS管<b class='flag-5'>到底是</b>什么?和三極管、繼電器有什么本質(zhì)區(qū)別?

    IGBT到底是什么?-從名稱入手來帶您了解

    對(duì)于工作需要用到IGBT、但從未專業(yè)學(xué)習(xí)過IGBT的人來說, IGBT到底是什么、它為什么叫IGBT、它的核心關(guān)鍵詞是什么、要怎么理解它 等一系列問題并無法一次性在某個(gè)地方獲取到,都需要查閱大量的資料,學(xué)習(xí)大量的基礎(chǔ)才能有個(gè)初步的了解。 為了讓更多的人在更少的時(shí)間內(nèi)掌握I
    的頭像 發(fā)表于 11-25 17:38 ?1562次閱讀
    IGBT<b class='flag-5'>到底是</b>什么?-從名稱入手來帶您了解

    請(qǐng)問Keil中的map文件到底是什么意思?

    Keil中的map文件到底是什么意思?里面是如何進(jìn)行相關(guān)執(zhí)行操作的
    發(fā)表于 11-25 06:59

    單片機(jī)和嵌入式,到底是什么關(guān)系?

    的關(guān)系:什么是單片機(jī)?什么是嵌入式?它們到底是不是一回事?先說說大家最先聽說的那個(gè)詞——單片機(jī)(MCU)。單片機(jī),全稱是MicrocontrollerUnit,顧名思
    的頭像 發(fā)表于 11-14 10:28 ?1544次閱讀
    單片機(jī)和嵌入式,<b class='flag-5'>到底是</b>什么關(guān)系?

    IEC 到底是什么?為什么它能影響全球?

    IEC 到底是什么?為什么它能影響全球?
    的頭像 發(fā)表于 09-04 17:07 ?3592次閱讀

    SQL 通用數(shù)據(jù)類型

    SQL 通用數(shù)據(jù)類型 數(shù)據(jù)庫(kù)表中的每個(gè)列都要求有名稱和數(shù)據(jù)類型。Each column in a database table is required to have a name and a
    的頭像 發(fā)表于 08-18 09:46 ?714次閱讀

    基于低頻旋轉(zhuǎn)電壓信號(hào)注入的PMSM初始定位

    針對(duì)增量式光電編碼器在永磁同步電機(jī)工作中存在的初始定位問題,提出了使用低頻旋轉(zhuǎn)電樂信號(hào)注入法,通過檢測(cè)注入信號(hào)作用下電機(jī)轉(zhuǎn)子發(fā)生微小轉(zhuǎn)動(dòng)的時(shí)刻,確定轉(zhuǎn)子初始位置的方法。通過詳細(xì)分析永磁同步電機(jī)在低頻
    發(fā)表于 08-06 14:36

    晶振的 “負(fù)載電容” 到底是什么

    負(fù)載電容,到底是什么? 負(fù)載電容,簡(jiǎn)單來說,是指晶振的兩條引線連接IC塊內(nèi)部及外部所有有效電容之和,我們可以將其看作晶振片在電路中串接的電容。從更專業(yè)的角度講,它是為了使晶振能夠在其標(biāo)稱頻率下穩(wěn)定
    的頭像 發(fā)表于 07-25 16:26 ?1078次閱讀

    lt4363的手冊(cè)中提到的self enhancement of the N-channel MOSFET到底是什么含義?

    enhancement”效應(yīng),中文應(yīng)該翻譯成“自增強(qiáng)效應(yīng)”嗎?我應(yīng)該如何理解這個(gè)“self enhancement”效應(yīng)呢?能詳細(xì)講解一下這個(gè)效應(yīng)嗎?
    發(fā)表于 07-14 07:11

    請(qǐng)問編譯純r(jià)tos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?

    編譯純r(jià)tos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?
    發(fā)表于 07-11 07:22

    目前Mirco Python sdk觸摸到底支持什么驅(qū)動(dòng)啊 ?

    目前的Mirco Python sdk觸摸到底支持什么驅(qū)動(dòng)啊 能不能有資料詳細(xì)說明 GT911 觸摸驅(qū)動(dòng)是否支持啊
    發(fā)表于 06-24 07:02

    智能盒子到底是什么東西?昇騰310深度測(cè)評(píng):為何能成為行業(yè)新寵?

    讓人摸不著頭腦的“智能盒子”。各位搞技術(shù)、搞工程的朋友,咱們?cè)诠ぷ髦惺遣皇墙?jīng)常聽到“智能盒子”這個(gè)說法?每次聽到這個(gè)詞,我猜很多人心里都在犯嘀咕:這東西到底是個(gè)啥玩意兒?難道就是個(gè)裝了點(diǎn)智能軟件的普通盒子?它到底有啥用?能給咱們的工作帶來啥方便?
    的頭像 發(fā)表于 04-27 10:46 ?1894次閱讀
    智能盒子<b class='flag-5'>到底是</b>什么東西?昇騰310深度測(cè)評(píng):為何能成為行業(yè)新寵?

    一文給你講透!DA板卡到底是什么?它和主板又有哪些不同?

    大家好,我是老王,在電子行業(yè)干了十幾年,今天我就用“大白話”給大家講講DA板卡到底是啥,它和咱們常說的“主板”有啥區(qū)別。文章里會(huì)穿插一些表格和實(shí)際案例,保證你讀完不僅能懂,還能跟朋友吹牛!
    的頭像 發(fā)表于 04-24 16:48 ?2427次閱讀
    一文給你講透!DA板卡<b class='flag-5'>到底是</b>什么?它和主板又有哪些不同?

    SV601187的詳細(xì)資料合集包括了電路圖,原理圖和介紹等詳細(xì)資料概述

    純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評(píng)論支持一下哦~)
    發(fā)表于 04-02 14:18

    使用燒錄器STLINK V3 mini的時(shí)候,發(fā)現(xiàn)14PIN的接口上面有一個(gè)GNDDETECT PIN,Type是輸出結(jié)構(gòu),這個(gè)PIN到底是干啥用的?

    我在使用燒錄器STLINK V3 mini的時(shí)候,發(fā)現(xiàn)14PIN的接口上面有一個(gè)GNDDETECT PIN,Type 是輸出結(jié)構(gòu),我想知道這個(gè)PIN到底是干啥用的?要怎么接才合理?
    發(fā)表于 03-14 09:39