PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
s0510510
Advance Member
 
s0510510的大頭照
 

加入日期: Apr 2004
文章: 336
引用:
作者student
select s_name from s left join r on s.s# = r.s#

表示抓出s資料表的資料, 並且利用 s.s# 與 r.s# 運算是將 r 資料表與s 資料表結合
但是抓出來的資料以s資料表為主, r資料表只是將符合的資料join上去

大大的說明小弟有看懂,小弟順便複習該運算的定義
很詳細的解說,感恩
     
      
__________________
舊 2008-05-14, 04:20 PM #21
回應時引用此文章
s0510510離線中  
elase
*停權中*
 

加入日期: Dec 2006
文章: 89
引用:
作者s0510510
那考試這樣出,不是為難考生嗎?
誰叫小弟是考生,就盡力準備
多謝大大的回復,感恩

如果是考試最保險就是全寫
寫 inner join 不寫 join
寫 left outer join 不寫 left join
寫 right outer join 不寫 right join
 
舊 2008-05-14, 07:00 PM #22
回應時引用此文章
elase離線中  
Devil
Power Member
 

加入日期: Jan 2001
您的住址: Taipei
文章: 503
引用:
作者s0510510
先跟大大說聲抱歉,小弟語言表達能力不好,造成大大的困擾
小弟會這樣問的原因是因為考試的題目這樣問
要將Relational Algebra 用SQL指令寫出來
所以想說針對Relation Algerbra在SQL指令整理出來
在整理過程中發現Outer Join在SQL中的指令有兩種
一種是Left Join,另外一種是Left Outer Join
所以才會發問第一個問題

發現這問題之後,小弟又想到還有一個指令
Left Outer Theta Join在SQL中為R LEFT OUTER JOIN ON S(書上面這樣表示)
所以我在想如果這裡的Outer可以拿掉嗎?
我想是不是我想太多,想到走火入魔@@

聽到大大說有SQL很多版本,這樣每個版本指令都有差異
簡單的說就是要看是在那本版用
那考試這樣出,不是為難考生嗎?
誰叫小弟是考生,就盡力準備
多謝大大的回復,感恩

保險的作法就是不要用各DB獨特的語法,例如SQL Server的T-SQL,ACCESS的VB函數
而採用符合ANSI-SQL的語法,可參考SQL-89,SQL-92
__________________

此文章於 2008-05-14 08:04 PM 被 Devil 編輯.
舊 2008-05-14, 08:01 PM #23
回應時引用此文章
Devil離線中  
s0510510
Advance Member
 
s0510510的大頭照
 

加入日期: Apr 2004
文章: 336
引用:
作者elase
如果是考試最保險就是全寫
寫 inner join 不寫 join
寫 left outer join 不寫 left join
寫 right outer join 不寫 right join

小弟想想這應該是比較保守的方法,多謝大大的提示
__________________
舊 2008-05-18, 03:03 PM #24
回應時引用此文章
s0510510離線中  
s0510510
Advance Member
 
s0510510的大頭照
 

加入日期: Apr 2004
文章: 336
引用:
作者Devil
保險的作法就是不要用各DB獨特的語法,例如SQL Server的T-SQL,ACCESS的VB函數
而採用符合ANSI-SQL的語法,可參考SQL-89,SQL-92

小在這邊多謝大大的說明,我想不要用各獨特的語法應該是最保險的
至於大大說的ANSI-SQL的語法,小弟會利用GOOGLE大神找一些資料
畢竟資料處理這科不是只有DB而已,還有UML、JAVA程式等很多小弟第一次接觸的東西
這邊也多謝Devil大大的熱心幫小弟解惑
__________________
舊 2008-05-18, 03:13 PM #25
回應時引用此文章
s0510510離線中  
s0510510
Advance Member
 
s0510510的大頭照
 

加入日期: Apr 2004
文章: 336
小弟另外又有問題了,要再次麻煩版上熱心大大

----以下是題目-----
請舉例說明下列程式有何安全上之漏洞?並說明如何修補該安全漏洞。
Dim sql
Sql=”SELECT *
FROM WebUsers
WHERE Username = = ’’’& username &’’’ AND
Password = = ’’’ & password &’’’’’
Set rs=Conn.OpenRecordset(sql)
If not rs.eof() then ‘user connected successfully’
end if

----以下是解答------
(1)攻擊者在密碼檔部分輸入Aa’ OR TRUE OR’,而程序如不過輸入做任何檢查和過濾,將會導致密碼失去效用。所以當攻擊者只要知道用戶帳號,就可以任何用戶登錄,進行違法行為。
SELECT *
FROM WebUsers
WHERE Username = = ’Bob’ AND
Password = = ’ Aa’ OR TRUE OR’
(2)攻擊者把帳戶名設為’;DROP TABLE WebUsers--,將會刪除WebUser表均被刪除。
SELECT *
FROM WebUsers
WHERE Username = ’ ;DROP TABLE WebUsers-- AND
Password = ’’

----以下是小弟的問題------
做到這種題目,小弟的第一個反應是錯愕,怎樣下手都不知道
我想這應該是我對程式語言不熟的原因(總覺得我像肉片一樣在SQL裝熟)
離題了∼∼

第一個問題:解答第一點,為什麼輸入了Aa’ OR TRUE OR’的指令,就不產生任何驗證,那這整句話指令要怎樣解釋?Aa有代表什麼意思嗎?

第二個問題:針對解答第二點,針對;DROP TABLE WebUsers--AND Password = ’’
的指令,小弟只知道在SQL中,「--」帶表示註解,所以用戶密碼因為被下注解而不會驗證,那用戶帳號的驗證是因為指令下了DROP,所以不會驗證嗎?另外在這指令中,Drop前面的分號在這邊有特殊意義嗎?因為小弟沒辦法理解為什麼要加分號

第三個問題:在SQL指令中,代表文字是不是都要用這符號 ' ' 代表?

抱歉一下又問了很多蠢問題,還煩請諸位大大幫小弟解惑,感恩
__________________
舊 2008-05-18, 03:28 PM #26
回應時引用此文章
s0510510離線中  
dabochi
*停權中*
 
dabochi的大頭照
 

加入日期: Nov 2002
您的住址: 東湖
文章: 1,688
引用:
作者s0510510
小弟另外又有問題了,要再次麻煩版上熱心大大

----以下是題目-----
請舉例說明下列程式有何安全上之漏洞?並說明如何修補該安全漏洞。
Dim sql
Sql=”SELECT *
FROM WebUsers
WHERE Username = = ’’’& username &’’’ AND
Password = = ’’’ & password &’’’’’
Set rs=Conn.OpenRecordset(sql)
If not rs.eof() then ‘user connected successfully’
end if

----以下是解答------
(1)攻擊者在密碼檔部分輸入Aa’ OR TRUE OR’,而程序如不過輸入做任何檢查和過濾,將會導致密碼失去效用。所以當攻擊者只要知道用戶帳號,就可以任何用戶登錄,進行違法行為。
SELECT *
FROM WebUsers
WHERE Username = = ’Bob’ AND
Password = = ’ Aa’ OR TRUE OR’
(2)攻擊者把帳戶名設為’;DROP TABLE WebUsers--,將會刪除WebUser表均被刪除。
SELECT *
FR...


1.這個安全漏洞如果以在下寫程式的經驗 要根治建議是直接掛Stored Procedure或是掛Transaction上去 不在程式下定義sql條件式-不過這個方式100%不會是考試的解答就是xp
2.'"&~&"'是sql下表示變數的方式 但是sql很蠢 解讀變數的方式是把變數代表的東西填進去之後再解讀整個字串.所以當填Aa’ OR TRUE OR’進去之後 sql在解讀時會把後面的Password = = ’ Aa’ OR TRUE OR’解讀為不管對錯都會回傳eof;另外一個;DROP TABLE WebUsers--也是因為同一個問題 sql會以";"為分界將sql切成兩個條件式,並在"If not rs.eof() then ‘user connected successfully’ end if"進行驗證前就將Table WebUsers整個刪除
舊 2008-05-18, 04:35 PM #27
回應時引用此文章
dabochi離線中  
dabochi
*停權中*
 
dabochi的大頭照
 

加入日期: Nov 2002
您的住址: 東湖
文章: 1,688
引用:
作者s0510510
(恕刪)
SELECT S_name
FROM Student,Take
WHERE Take.S# = = Student.S#
GROUP BY Student.S#
HAVING COUNT(*)>5


這個是考試用的解法 在SQL底下稱為Cross Join 對DB Server而言 這是一個很傷效能的做法可以不用就不用 可以的話 在下會建議閣下考完試最好就忘了他(另外 Cross Join跟在下上面回覆的SQL Injection是SQL初心者常常會沒處理好的問題 要當心)

如果真的因為正規化沒做好 得要用這麼複雜的敘述句 建議是仿student先進的回覆 用Inner Query來達成

引用:
作者student
select S_name from student where s# in (select s# distinct from Take group by s# having count(s#) > 4)
舊 2008-05-18, 05:01 PM #28
回應時引用此文章
dabochi離線中  
dabochi
*停權中*
 
dabochi的大頭照
 

加入日期: Nov 2002
您的住址: 東湖
文章: 1,688
引用:
作者dabochi
...sql在解讀時會把後面的Password = = ’ Aa’ OR TRUE OR’解讀為不管對錯都會回傳eof...


這裡打錯了 應該是"不管對錯都不會回傳eof"
舊 2008-05-18, 05:06 PM #29
回應時引用此文章
dabochi離線中  
Devil
Power Member
 

加入日期: Jan 2001
您的住址: Taipei
文章: 503
引用:
作者s0510510
小弟另外又有問題了,要再次麻煩版上熱心大大

----以下是題目-----
請舉例說明下列程式有何安全上之漏洞?並說明如何修補該安全漏洞。
Dim sql
Sql=”SELECT *
FROM WebUsers
WHERE Username = = ’’’& username &’’’ AND
Password = = ’’’ & password &’’’’’
Set rs=Conn.OpenRecordset(sql)
If not rs.eof() then ‘user connected successfully’
end if

----以下是解答------
(1)攻擊者在密碼檔部分輸入Aa’ OR TRUE OR’,而程序如不過輸入做任何檢查和過濾,將會導致密碼失去效用。所以當攻擊者只要知道用戶帳號,就可以任何用戶登錄,進行違法行為。
SELECT *
FROM WebUsers
WHERE Username = = ’Bob’ AND
Password = = ’ Aa’ OR TRUE OR’
(2)攻擊者把帳戶名設為’;DROP TABLE WebUsers--,將會刪除WebUser表均被刪除。
SELECT *
FR...

1.就是很單純的[隱碼攻擊],你可以試著將Aa’ OR TRUE OR’帶入整個SQL Command看看會組合成什麼樣子的句子,結果可以解讀為,它將會使WHERE的條件式為true
可以上網找找看[隱碼攻擊],[SQL Injection]的資料
他的原理是,許多網頁程式設計師,喜歡使用連接字串的方式來撰寫SQL Command
這樣就給了攻擊者一個機會,讓他們可以在網頁上的文字方塊內輸入SQL Command並且執行
所以,千萬不要使用連接字串的方式撰寫SQL Command,而採用Parameter帶入參數的方法
2.Drop是屬於SQL DDL,作用在於刪除,分號是在於它要分段SQL Command,所以,分號之前是一段SQL Command,分號之後又是另一段SQL Command了
__________________
舊 2008-05-18, 05:22 PM #30
回應時引用此文章
Devil離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是11:40 AM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。