[音樂播放] DAVID馬蘭:這是CS 50,並且 這是9週的開始。 而我們認為我們今天會做不 只有關閉在上週的一章 材料,我們專注於服務器 端Web編程的PHP和SQL, 一些數據庫的東西。 我們將談論了一下 今天的安全性,然後 過渡到客戶端編程 語言稱為JavaScript的。 但首先,一些贖回。 你可能還記得,上 週三,我設置了 寫一個網​​站, 把用戶的輸入 通過HTML表單是將存儲 該用戶輸入的姓名,電話 號,以及手機 載流子在數據庫中。 然後我有一個小命令 行的腳本編寫PHP 這本來是要遍歷 在數據庫中的行 並發送短信。 儘管幾次,多次嘗試,我們 沒有得到該工作的結束。 所以,我這整個星期花在工作 對這些代碼讓我們過去點 在我們離開的,即所有的 我得到了週三的結束 是這樣的短信 從馬戈我掙扎著, 接著從另一個文本消息 同學,你有這個大衛。 其次是這一個, 奇妙的鼓勵。 保持下去,非常振奮人心。 我幾乎得到了它,直到then--和 這就是我們最終在週三的說明。 然後其實也許是我的最愛, 片刻之後,該走了進來。 該死的實時流。 所以今天,我們解決這個問題有一個快速 看看,因為我做了什麼。 因此,所有這些代碼可用 在網上從上週的八週, 源代碼。 你會看到,我經歷了, 實際上我清理東西有點。 我介紹了幾個其他 SQL數據庫的功能。 例如,而不是 只是讓VAR炭載體 因為我覺得上週我做的飛行。 我不是把它定義為 什麼所謂的枚舉。 和一些你可能已經看到了這一點 當我們探討C.枚舉實際上是 了C一個功能,您可以 列舉了一大堆常量 並為它們分配的自動值, 像的一個,兩個,三個,四個 而無需硬碼號。 因此SQL支持相同的,由此,如果 你有一個數據庫字段,你只 要採取有限1 值,你可以從字面上指定它 因為我已經四年沒有做過 熱門美手機運營商。 所以我這樣做。 我做了一些改動,作為 好了,其中最重要的 是讓電子郵件,因為召回工作, 這個程序依賴於它 一般稱為電子郵件至 短信網關,這就是 中說,Verizon公司看中路, AT&T和其他人支持的服務器, 如果它接收到,由此 電子郵件,它轉換為短信 並發送一個文本 消息到別人的手機上。 所以,如果我沒有這樣做, 這裡是一個新的和改進的形式 這是要談 新的和改進的代碼,這 你可以在線播放。 它有望使我 手機提示音在短短的一瞬間。 因此,首先,我要在我的名字輸入。 第二,我不會 要做到這一點這個時間。 我會做檢查元素。 而這僅僅是一個 小東西,所以我不 創建後期製作的時間 因為我做了最後一次努力。 現在有我的電話號碼。 我會選擇Verizon公司。 在這裡,讓我們打開這個麥克風 在這裡,這個目標在我的手機在這裡。 我要去點擊註冊, 這應該有希望 把它放到數據庫中。 現在,我會去的 命令行程序,這 回憶被稱為點斜線 文本,用你的手指。 開始了。 [手機鐘聲] [掌聲] DAVID馬蘭:所以比this--更多的樂趣 它的樂趣,當然,如果我進去了。 但它更有趣,我想,如果我們 在這些電影的時刻之一 其中相似的東西真的 糟糕的事情在世界上, 像所有的美國國家安全局的人的 手機開始發出蜂鳴聲 與短信 提醒他們注意這個事實。 所以我想我們會嘗試 在此重建相同, 由此不使用數據庫, 我代替預先 寫了一個程序,看起來像這樣。 這是一index.php-- 我把這段代碼在線 作為well--,顯然 只是呈現form.php的, 使用MVC風格的範例,我們 談更詳細的問題集 七。 這種形式是非常簡單的。 這將提交給 文件通過郵寄稱為here.php。 而且它顯然是要問 一個名字和一個電話號碼, 然後,通過所謂的 選擇菜單,這是 要給你至少四 熱門美手機運營商, 然後讓你有效 點擊這裡好好聽講。 而在這裡,與此同時,將要 借用一些代碼的最後一次。 如果你只是瀏覽一下, 你會看到有 一大堆錯誤檢查。 但在美女到底是 我們今天沒有寫入數據庫。 我們保持它簡單, 剛發出希望 通過功能我一個短信 寫了這幾天電話 文,這是在功能。 PHP的, 這又是在網上提供。 所以,如果你想在這分享。 我們不會被存儲任何東西。 去這個網址這裡是實時的。 不要提交,只是還沒有,但我們 看看我們是否能擁有這些電影之一 瞬間,每個人的手機 會發出嗶音,希望只是 在2011年與今年一次 這哪裡去了可怕出錯。 一旦你去這個地址, 你應該看到一個超級簡單的形式 如果你有一個名字,一個手機 號,和一個蜂窩電話載波 列表中有匹配,則轉到 進取,填寫表格。 但是,不要點擊提交,只是還沒有。 窗體的打算是這樣的。 來吧,鍵入 您的姓名,電話號碼。 空中接力,一個人是怎麼回事遙遙領先。 沒關係。 OK,每個人都填寫了表格。 這應該工作在 手機也一樣,如果你​​想要的。 好吧,在你的痕跡,被置,走了。 打到這裡。 什麼? 號 我向上帝發誓,我測試 這種多次至今。 你懂嗎? [插VOICES] DAVID馬蘭:OK,用戶錯誤可能。 這是兩人。 它的工作有兩個出了 幾百年,三,四。 OK,這是很好的。 五分之四的 正確性如何。 那麼到底發生了什麼? 因此推測,沒有看到你 屏幕上,為什麼它可能有誤? 這可能是我們剛 試圖讓過多的連接 哈佛的郵件服務器全部 一旦從相同的IP地址。 我只是猜測,因為我沒有 有測試的奢華 這段代碼的一些 300人提前 但現在認識到, 在於,至少應 已經得到完成這次任務。 好吧,那麼為什麼是這一切的 更有密切關係這是怎麼回事? 那麼首先,快速 夫婦公告。 所以一個,如果你想加入長安,和 尼克,和其他人在午餐這個星期五​​, 做的RSVP在通常的URL存在。 如果你正在考慮集中的 或做在CS輔助, 無論你是一個大二的學生,還是大一新生, 甚至大三或大四這一點 而且還可以擠在課程, 認識到工程學校 正在收集免費Ben和 傑里的冰淇淋和建議 本週三後不久級 下午4:00,在CS建設 在麥克斯韋德沃金。 如果這是過速 在屏幕上,只是去 以cs50.harvard.edu了 鏈接至Facebook活動 在這裡你可以看到更多的細節。 同時,我想我會改正 另一件事我瘋玩週三。 原來,馬克的ID 在Facebook上是不是三個。 這是4。 原來,他有更多的測試 帳戶比我記得。 但是,這是什麼感覺像一個機會 做的是拉這樣的URL。 所以,事實證明,Facebook有一個 API,應用程序編程接口, 這是一個機制,使你 可以通過編程方式請求數據 在Facebook和取回機 可讀的信息,而不是網頁 但只是原始的文字,一些 被稱為JavaScript對象表示法。 而事實上,如果我訪問這個 URL,並放大,在默認情況下, 這是馬克的公開 獲得的信息。 而有趣的細節 這裡只是他的ID 的確,排名第四,這是我 當我這樣做實現。 你可以自己做,如果你知道 您的Facebook用戶名,如果你有一個。 只需鍵入它頂在那裡。 而這一切都不是私有的。 我只是在做這甚至 在隱身模式。 所以我連登錄。 和你看到的是我 顯然是用戶數6454 在Facebook上,這是不 太糟糕了,這些天。 所以,無論如何,你還會看到 其他信息在那裡。 和有用的方面 那是你 可以編寫自己的軟件, 在某種程度上整合了這樣的數據 到自己的應用程序。 您可以授權用戶 登錄到您的網站, 不使用自己的自定義的用戶名和 密碼,但也許他們的Facebook登錄 和獲取信息甚至 他們的朋友, 如果他們同意這樣的或類似的。 因此請注意,CS50,也 有一些自身的API, 一個是課程目錄數據, 對於一些在餐廳的菜單擁抱 室,所有的 建築和地點 在校園裡,我們有一個API,以及 您可以查詢類似,並得到 回文本數據,你可以整合 到一個PHP或JavaScript,甚至, 雖然不常用,一 基於C的最終項目。 事實上,未來的最終 項目是幾個里程碑。 您從我們這裡得到一個電子郵件的一天。 認識到提案 是下星期一到期。 它並不一定約束力,但你 確實需要得到你的教學研究員 製作前批准 其後任何更改。 然後前面有一個 其他里程碑的數字。 因此,為了逗你,也 有一些可能性, 我們有一堆 這些色調燈泡。 而一些你們現在有一些 這些在你的宿舍裡也是如此。 而且他們也有一個API。 於是想起那些二進制燈泡週 以前,丹·布拉德利和安塞爾 達夫為我們創造。 他們使用的軟件界面 這個燈泡,這在目前 插入電 然後經由無線 連接到一個小東西 所謂的橋到這裡, 像一個小的路由器專有 這個特定的設備。 但事實證明,如果我知道如何 發送HTTP消息,因為我們現在都做, 我可以發送類似這樣的消息來 這種燈泡將其打開或關閉 或做任何數量的 在其上的其他操作。 請注意,它沒有得到,這不是發布。 還有另外一個叫放。 實際上,有一些其他類似的動詞。 但是請注意有一個路徑存在, API斜線,斜線新的開發者, 光斜線,斜線1,斜線狀態。 這顯然只是 路徑該公司,飛利浦, 決定你必須打 與HTTP請求 如果你想改變狀態 的使用HTTP1.1的燈泡。 然後注意空行。 然後最後是什麼樣子 樣的一些種類的陣列, 這再次將被稱為 JavaScript對象表示法,或傑森。 你在這裡看到的是, 有三個鍵值對。 一個關鍵的要求。 和它的價值顯然 將是真實的。 亮度是128,其 是某種為int。 然後過渡時間 零,這顯然是 多久它會 需要把這個東西上。 所以現在這種燈泡不亮。 但是,如果我做的正是讓this-- 我去一點小抄 丹成立 advance--我要去 繼續前進,複製 下面的命令。 捲曲,因為你們中的一些 可能收集到的CS​​50 討論的是如Telnet這樣的實用工具 你可以模擬HTTP請求, 特別提出。 我可以將此數據發送, 具體是什麼,我們只是 看了剛才專門 這個網址在這裡。 然後捲曲將要處理 所有必要的報頭 並分析存在的。 因此,所有我需要做的就是這個複製到 一個終端窗口,然後按Enter鍵。 和燈泡點亮。 這是所有經歷 我的電腦無線 以某種方式下至橋,這 然後,談話這個燈泡。 我可以做別的事情。 我可以做這件事 去紅的實例。 我可以舉例進行 這個東西走向綠色。 我可以讓他走了藍色。 並注意在每個這些 情況下,所有的,我自己在改變 是所謂的色調值,以 居然給它點顏色。 因此,讓我貼,以及這一個。 現在是藍色的。 你可以做的更炫 事情where--讓我們去綠色。 我能做到這一點的 當然有我自己的代碼。 但即使是API本身 支持時髦的操作 像這樣,現在會打擾 我們在接下來的30秒。 所以這是一種什麼味道,你可能會 做一個API,這其中涉及到 燈泡。 注意,CS50有幾個 對谷歌的玻璃,如果你想 喜歡沿著對付的東西 這些線路,Arduino的UNOS,這 在小小的電腦, 實際上,在一個小電路板 您可以連接 電線和其他東西 和實際控制 您的真實世界的環境。 然後有一對夫婦 新的玩具,我們有。 這個從字面上來乍到的 日前通過郵寄,一繆袖標。 而且我認為這是一種方法, 讓你興奮的項目 你可能會與使用 該硬件會 要玩這個短片 他們用它來捉弄人 我們現在生活在未來。 [音樂播放] DAVID馬蘭:所以在短短的幾個星期,你 也可以在CS50公平的涼爽。 另一種設備,我們 有一大堆的,我們是 樂意借出的項目 被稱為運動控制器。 這是一個小的USB設備 在連接到計算機 讓您與互動 你的筆記本電腦,Mac或PC, 就好像你有喜歡的Xbox Kinect的 而實際上使身體動作多 就像我們在此看到 對未來的看法。 [音樂播放] DAVID馬蘭:所以,即使你有 不知道如何這樣的事情 也可能會被發明或作品 在硬件一級,不管。 即使是CS50的短短幾個月後, 和編程的理解 更一般地,和web編程更 近日,然後又API和HTTP, 你將通過訪問 如果你的軟件的API 也想藉其中的一個 設備實際談談它 而不必擔心 底層的實現 細節,這是完全 有層次感這一概念是一致 我們已經抽象 看到整個學期。 所以也上週末, 看到一對夫婦則新聞。 先走,去講座,如果你 想學習的東西 更在任意數量的主題。 請參閱網址那裡。 而這一次被送到 我通過張,你知道是誰, 誰是我們的打印頭大象的軍隊。 並且它是一個標題如下。 我害怕我的新電視。 為什麼我害怕把這個 關於你的東西會太。 所以我們現在是在 指向學期, 過,在這裡,即使你有 一絲絲的理解 如何在網上工作,和HTTP, 和安全性,這樣的事情 應該開始吸引您的眼球。 但同時,你就會明白 這些東西是否是或不是 實際的威脅。 所以我拍了幾張摘錄 從這篇文章在這裡。 而這個故事如下。 我現在的老闆 新的智能電視,這 承諾提供流媒體 多媒體內容,遊戲,應用程序, 社交媒體和互聯網 瀏覽了哦電視了。 唯一的問題是,我現在 害怕使用它,作者說。 你會也一樣,如果你​​讀通過 在46頁的隱私政策為您的電視。 數據這一量 收集的東西是驚人的。 它記錄在哪裡,何時,如何,以及 您使用的電視機有多長。 它集跟踪cookie, 正如我們已經討論過, 和信標設計 當你發現 查看特定的內容或 一個特定的電子郵件消息 如果你想在電視上查看電子郵件。 它記錄了你的應用程序 使用,您訪問的網站, 以及如何與內容互動, 通過您的智能電視做了這一切。 同時,creepier yet-- 這是我的addition-- 有一個內置的攝像頭 面部識別。 的目的是提供一種 手勢控制電視 並讓您登錄 個人賬戶使用你的臉。 從正面看,該圖像 保存在電視上,而不是上傳 到企業服務器。 在缺點方面,互聯網 連接使得整個電視 容易受到黑客誰 已經證明的能力 取機器的完全控制。 更令人不安的是,彷彿那不是 足夠聰明,是麥克風。 電視擁有語音 識別功能 這讓觀眾控制 屏幕使用語音命令。 但服務自帶 一個相當不祥的警告。 請注意,如果 你說的話,包括 個人信息或其他敏感 信息,該信息 將捕獲的數據中 並傳輸到第三方。 明白了嗎? 不要說個人或敏感 東西在你的電視機前。 因此,這實際上是真實的。 它很難不,如果你看到 去百思買等,用於電視 這些日子。 他們都是聰明的以某種方式。 而他們得到的 更智能,creepier。 他們只是簡單地收集數據 在我們談論如何 然後通過HTTP或上傳它 其他一些協議的一些服務器。 因此,這是一個有趣的物品 在這個在線網站 在這裡,裡面講到一個 尤其錯誤或錯誤的代碼 我們實際上可以配合 到上週的討論。 所以這個標題是因為 下面,故事到這裡, 喬希Breckman工作了 公司得到了一個合同 開發一個內容管理 系統或CMS,因為他們是所謂的, 在相當大的政府網站。 多參與該項目的 開發一個內容管理系統 使員工會 能夠建立和維護 不斷變化的 他們的網站內容。 事情進展得很不錯 上線後數天。 但在6天裡,一切都很不那麼好。 所有的內容 網站已經完全消失了。 和所有網頁導致了默認, 請輸入內容的網頁。 哎呦。 喬希被稱為中 調查發現 一個特別麻煩 外部IP地址了 走在並刪除所有的 系統上的內容。 IP地址不屬於 一些國外黑客彎曲 對破壞有益 政府信息。 它決心googlebot.com, 谷歌公司自己的網頁抓取蜘蛛。 哎呦。 經過一番研究和擾 四處打聽一個noncorrupt備份, 喬希發現問題。 用戶已複製 粘貼從一個有些內容 頁面轉到另一個頁面,其中包括 在編輯超鏈接 編輯網頁上的內容。 通常這不是一個 由於外部用戶問題會 需要輸入用戶名和密碼, 但在CMS認證系統中, 登錄系統, 沒有考慮到 成熟的黑客 谷歌蜘蛛的技巧。 哎呦。 事實證明,谷歌 蜘蛛不使用 餅乾,這意味著它可以 輕鬆地繞過了檢查 登錄cookie的設置是錯誤的。 它也不會留意 JavaScript中,這通常 提示和重定向用戶 未登錄誰英寸 但它確實遵循每 每一個超鏈接找到網頁上, 包括那些具有 刪除頁面的標題。 哎呦。 那麼,這是否意味著更多的 技術問題,而是相當接近條款? 它只是意味著, 在他們的網站上, 他們的網址並不像這一個 您可能會看到在問題設置7。 召回問題集7 或者知道問題集7 你所遇到的挑戰, 除其他事項外, 以代表用戶的拋售股票。 但是,實施該功能通過方式 通過在用戶獲得超級鏈接 接口,可能 不是最聰明的想法 因為如果你的網站是莫名其妙 訪問或者通過人工 誰的點擊左右或購買 機器人像谷歌的或蜘蛛 因為他們是所謂的,這只是 爬行網頁試圖指數 網絡作為一個搜索引擎, 他們可以很容易 通過打得到這種URL的。 這就是功能 相當於,在這種情況下, 谷歌銷售的所有股份。 現在,坦率地說,它是完全 愚蠢的CMS 使用JavaScript和cookie 實施其登錄系統 不這樣做服務器端,如 你們在PSET做,會7-- 有一個的login.php file--永遠,永遠, 安全始終應該是 在服務器側進行, 未在客戶機側,因為正如本 文章建議,你可能自己 看到在某些時候,它是 平凡的用戶,是好是壞, 剛剛關閉JavaScript 更何況餅乾。 所以這是你的日常跆拳道。 還有一個,這 是那種太可怕了, 所以我會提到它,如果 僅作為一個生命的教訓。 當你使用一個應用程序 所謂像Snapchat等 這表示,這些照片只持續 五秒十秒鐘,或諸如此類的東西。 他們是短暫即 絕對不是這樣的。 像有沒有辦法,數字化, 實現某種形式的視頻, 或圖像或文字等分享 上的另一端的接收方 不能以某種方式保存數據。 在最原始的方法,有人 可以採取他們的電話。 他們有10秒的窗口 而在尋找一些卡 只需要一些其他的手機 和它拍照,效果顯著。 所以,你可以保留 一些數字的方式。 你們當中有些人知道如何利用 截圖您的手機上。 事實上,如果你不知道這一點, 認識到,至少Snapchat, 而且我認為其他 應用這些天, 至少告訴你,如果 收件人實際 拍攝圖像的截圖。 但更糟糕的是,這是snappening, 有人最近創造它, 其中,大約10萬 捕捉已被釋放 什麼叫做torrent文件 在各網站最終。 而這些包含了一大堆 私人郵件和公告。 原來,他們大多是良性的, 所以不是你所期望的是什麼。 但由於人們有 使用第三方網站, 他們Snapchat登錄 用戶名和密碼,然後 保存所有的卡扣 這個第三方網站。 它是第三方 網站被黑, 它只是意味著有人想出如何 讓所有的10萬再加上那些圖片 到自己的硬盤驅動器 隨後的共享。 坦率地說,在這裡也一樣,它的排序 對愚蠢的Snapchat 以這樣的方式來實現該 第三方可以排序攔截 的數據,並且它不依賴於你的 自己的應用程序在手機上運行。 但在這裡,也認識到這些 事情不應該抓住你措手不及, 或者至少應該有 是生命的教訓在這裡。 如果您想技術 詳細信息,請訪問該網址有 這是在今天的幻燈片。 好了,就什麼問題 CS在今天的生活中的經驗教訓? 把這一關。 什麼事呢? 什麼事呢? 我已經得到了很多人的檢查 他們Snapchat什麼的了。 好吧,那麼SQL, 結構化查詢語言。 讓我們把這個包。 而且,即使 我們只是刮傷 這種表面 語言,我們會給你 足夠的語言 在PSET 7的形式 這樣就可以解決一些 相當普遍的功能。 但同時也發現有一對夫婦 事情我們不要求你, 但他們將是 重要的來了最後的項目 當然來使實際 實際用戶的網站 是這樣的設計決策。 事實證明,在 MySQL數據庫,你 有像一束束的選擇 為你的列中的數據類型 和其他的東西,但你也有 所謂存儲的選擇 引擎為您的所有數據, 排序文件系統, 如果您熟悉, 您的所有數據。 是它最終存儲在什麼格式? 與最常見的,或許,一直 MyISAM和InnoDB,技術術語 我們將只關心 的範圍內,一個人 和一個不具有 以下特徵。 假設你有 一個小宿舍冰箱。 並假設你和你的 室友,誰分享這個冰箱, 真的是喜歡說牛奶。 這是,事實上,如何 故事告訴我回來的路上 在這一天,當我把一門課程 所謂CS 161的操作系統,這 同樣探討了這個話題。 所以,你有這個冰箱。 你出的牛奶。 你回家的時候,你的室友的 還在上課也好, 而你決定我要去 出去找一些牛奶。 所以你關閉了冰箱,死機 宿舍裡,走在街對面 到CVS或其它地方,並獲得 在網上買了一些牛奶。 同時,你的室友到家 從類,進入宿舍裡, 打開冰箱,還實現 ooph,我們出的牛奶。 於是,他或她關閉 冰箱再發生 去其他的CVS, 這恰好是 從另一個CVS一個街區之遙 在廣場上​​,並在得到線 那裡得到一些牛奶。 現在,當然,在幾分鐘 後來,你們倆回去, 和最壞的所有可能的 結果已經發生。 你們兩個有奶。 而你真的不 像牛奶那麼多。 所以其中之一是剛 去酸味在一些點。 所以,現在你有過量 牛奶在冰箱裡全是因為什麼原因呢? [聽不清] DAVID馬蘭:是的,你沒有 彼此以某種方式進行通信 你都拿到牛奶。 因此,在最簡單的 如何在人類的世界裡, 如何才能避免這種無聊 場景發生這樣的 您只落得之一。 這些文字,是不錯的。 但是,怎麼回事? 貼字條。 DAVID馬蘭:一個便利貼。 任何形式的溝通 告訴你的室友 走不進冰箱裡的牛奶。 我打算去進貨我自己。 所以,你需要以某種方式 鎖定該資源。 因此,我們可以讓this--我們可以種 毀滅的故事,變成一個CS的故事 由此認為這是就像一個 的變量,它存儲一些數值。 而現在,在 牛奶的值為零, 你不想讓你的 室友檢查變量 然後再做出決定他或她自己 根據該變量的狀態 如果你在過程中 改變該變量的狀態。 所以SQL的線路之一,我們 給你PSET 7規格 這是一個在這裡。 我們不花大 的時間談論它。 但事實證明,如果你想 買一些股票CS50融資 你已經有 ,你的一些股票 希望能夠做一些 事情瞬間在一起。 你想成為能夠 有效地,在一個高的水平, 檢查沒事,如果我想 買免費的更多的股份, 仙股我們 在規範中講, 我想先檢查 我有多少股份有。 並假設這是5。 並假設我想 買10多了,我最終 想擁有15萬股股票。 所以我要問兩個問題。 什麼是變量的狀態? 什麼是該行的狀態呢? 有多少股票我現在有嗎? 然後,你要繼續前進,更新。 所以這是模擬的 牛奶在您檢查的行, 然後你想更新 因為如果你想購買10股, 你不想改變 行至10,則 想要將其更改為5 加10或,當然,15。 這行代碼將確保 這兩個概念的想法 一起發生或根本沒有。 沒有人,包括一些其它的用戶 誰是登錄到同一網站, 可不知何故中斷 行的檢查 與該行的更新,該 選擇,如果你願意的更新。 而語法是不是超明顯, 但是這一條線,長的是很, 確保這兩個操作 檢查變量或檢查行 並更新該行發生的原子。 哦,又來了。 在我的手機短信。 因此,讓我們使這個 一點更具體。 假設你不 實現一台冰箱, 而你不執行 PSET 7,但實際的銀行, 或自動取款機,自動取款 機,不知何故,讓你 希望能夠授權 用戶匯款 從一個帳戶向另一個。 OK,掛。 我現在要靜音,謝謝。 因此,我們要轉移資金 從一個帳戶號 到一個不同的帳戶 數,特別是100元。 因此,這是一種任意的 例如,讓你的自動取款機, 可能要執行兩個SQL 查詢,從一個帳戶中減去, 並添加到其他帳戶。 但是你要確保這些 兩行無論發生或根本沒有。 你不想要的東西 越來越中斷。 你不這樣做一些聰明的壞蛋 不知何故站在美國銀行 在前面的兩個自動取款機 他並以某種方式 排序打字的 同時命令, 希望試圖以小博大200美元,而不是 100元,只用100美元記。 總之,你要這 做出你期望的那樣。 和你的方式 這在SQL數據庫 你在什麼把它包 稱為事務。 從字面上看在SQL中,你可以調用CS50的 與報價引文結束開始查詢功能 交易。 然後,您可以執行任何數量 隨後的SQL查詢, 但他們都不拿 在數據庫上實現 直到調用查詢報價引文結束 提交時,如果再使用PHP。 並以這種方式,可以確保 即使你有1000個用戶所有 打你的數據庫 同時,SQL 會答應這些 兩個查詢將 後,其他執行一個正確的。 這樣你就不會結束與過量 牛奶或錯誤的數量,最終, 錢。 所以記住這一點, 沒有那麼多的PSET 7 但對於最終的項目 如果你是真正 試圖四處移動數據 跨表,你可能會在這裡。 但也許更簡單,更 顯然,了解一個例子 這是一個在這裡。 有人通過電子郵件發送關於我們 這只是一天 當他看到類似的東西在網上。 所以,據我所知,銷系統 是不是容易受到這種攻擊。 我不知道,如果它甚至使用 機罩下方的SQL數據庫。 但是,讓我們用它來 就事論事。 這裡的屏幕 哈佛人往往 查看與登錄時的 哈佛的ID號及其引腳。 並假設銷系統是 在PHP和MySQL的執行 數據庫,代碼,有人 可能已經編寫年前 可能是這樣的。 首先,聲明一個 變量調用的用戶名。 和剛剛獲得來自 在POST超全局。 然後得到另一個變量 所謂的密碼,也這樣做。 然後只需要執行 在這裡長時間的查詢, 從用戶那裡選擇明星 用戶名等於如此這般 和口令等於如此這般。 請注意,該捲曲 支撐我在這裡使用 剛才的意思是PHP,走 未來,並以 這兩個值 變數就在那裡。 他們不是絕對必要的,但 他們傾向於避免細微的語法錯誤。 因此,這看起來完全 正確的第一眼。 它是。 你可以實現的 銷系統是這樣的。 但是,假設一個超級 聰明和惡意學生 該輸入他或她的腳。 所以,我取出子彈 這裡的招牌,在模擬時, 我實際上已經揭示 他或她可能會打字。 這是一個有點怪。 但是,跳出你的可能 令人擔憂的關於用戶的輸入, 即使你不知道 SQL注入攻擊手段。 為什麼這個看起來有點腥? 那是什麼? [聽不清] DAVID馬蘭:本或者是 有點懷疑。 事實上,這是從SQL關鍵字。 所以這不是一個好兆頭。 一個事實,即有 所有這些單引號 那裡 - 其實,一個最簡單的 如何打破某些數據庫 是通過鍵入像O'Reilly的名字 一個其中有一個撇號 因為如果人類是誰寫的 幕後的代碼 沒有考慮到有 可能是單引號在用戶的 輸入,和他或她正在使用 單引號中的代碼, 不好的事情都可能發生。 事實上,更糟糕的是,考慮這一點。 如果這是一次代碼 有人在哈佛歲月 以前寫的腳 系統,注意什麼 即將獲得取代 用戶名和密碼 如果用戶在再次 skroob為他們的用戶名 然後一,二,三,四,五, 報價或報價引文結束一等 舉一個。 並注意什麼鍵 這裡是用戶還沒有 開始了他們的密碼或 其引腳與報價。 而且他們還沒有結束它 用引號,因為他或她 是假設如果 程序員就沒有那麼尖銳, 他們將有那些 單引號中的代碼。 因此,這裡的代碼。 和置換該 現在可能發生的事情是這樣的。 我已經強調了什麼 用戶已鍵入英寸 所以前,後。 並注意什麼婉轉現在令人擔憂 關於這個SQL代碼的右半邊? 這是一個稍微複雜一些,誠然, 比疑問,我們已經看到了。 但是這不可能 是一個很好的事情,如果你是 話說擇思达,這是選擇 一切從用戶的表 其中username等於skroob和 密碼等於一,二,三,四, 5或一等於1。 什麼是邏輯蘊涵 那最後一句大概是? 這只是總是如此。 那種因為我們已經猜到了 還是想通了,通過試錯 程序員誰 寫這段代碼沒 預測一個人或壞人 鍵入單引號為好, 我們可以語法 完成SQL查詢 帶著幾分無厘頭 但事 在語法上是不正確 總是計算為true。 因此,如果該代碼被用來回答 這個問題真的還是假的應 該用戶被允許通過,則 答案永遠是顯然會 是真實的,因為它始終會 以從數據庫中選擇的東西 因為過程中的一個總是等於1。 那麼,有什麼解決辦法嗎? 井PSET 7,我們實際上 避免這種情況都在一起。 我們給你一個查詢功能,而且我們 鼓勵您使用問號 作為佔位符,類似 在精神的printf的%S, 但什麼是關鍵關於問號 在這裡,如果你真正閱讀過 的functions.php,在那裡我們 查詢功能的實現, 這些問號都逃了出來, 因此任何潛在的危險 像單引號開啟 成轉義單引號。 因此,這是什麼 真正發生的事情,如果你 使用CS50的查詢功能,或任何數量的 第三方免費庫 這樣做。 不會在這種情況下重要,在綠色, 如果用戶在一個單一的報價已輸入 因為查詢 功能,我們寫的是 會前添加反斜杠 任何此類危險的報價。 因此,這是不是在 事實上,將是合法的。 這就好比鍵入一個瘋狂的尋找 密碼這是當然的,不會 要skroob的實際密碼。 因此,外賣的CS50是其中之一, 絕對是經常使用的東西 像CS50的查詢功能 或底層庫, 這恰好被稱為PDO。 但從來沒有,從來沒有, 永遠不會做這樣的代碼 不逃避或擦洗 正如他們所說的投入。 你會在某個時候可能 遇到這樣的一些網站。 事實上,它似乎是這種情況 像在機場和酒店的地方 他們有免費的Wi-Fi 訪問,你必須登錄到, 這些網站總是 可怕的實現。 所以在家裡練習一種樂趣, 不是為了惡意目的或以上 道路上的一個有趣的 運動,是只需要輸入 一個撇號,單引號, 到一些網站上的表單 看看會發生什麼。 如果服務器崩潰或使 你某種錯誤信息, 它很可能是 有人沒有預料到這一點。 然後你應該提醒正確 當局並沒有進一步進行。 所以,現在你們應該有希望 點擊這裡了解更多的怪胎幽默。 [笑] DAVID馬蘭:你知道你是個怪胎。 在接下來的幾個 年,你會記得 誰的小鮑比表是 由於這部動畫片在這裡。 所以記住這一點,因為我們 上下文切換是最後一次 今天為JavaScript。 我們花了比較少 時間對PHP的語法 因為它實際上是 超級相似C. 並很好地就夠了,太多的JavaScript 超類似C的語法 還有我們會看到 只是一瞬間,當我們將 看看本週晚些時候尤其如此。 你可以用這種語言做了什麼, 雖然,所有的功能更強大, 特別是原料藥。 但首先快速瀏覽。 因此,人們在JavaScript中,有 沒有主函數,這是很好的。 至於用PHP,你可以只寫代碼。 情況是這樣的。 和布爾表達式可能 這個樣子還是這樣。 開關的存在,並且它們 可能是這樣的。 四迴路這個樣子。 while循環是這樣的。 做消遣這個樣子。 然後陣列的樣子 這非常類似於PHP。 但是請注意,在你的JavaScript 聲明一個變量不與美元 簽署,不與數據類型,但是從字面上 說VAR變量之前。 它也是弱類型 在於它具有的類型, 但你不顯式地聲明它們。 而對於隨後的字符串, 例如,可能看起來 這樣,該字符串 在這種情況下,被稱為第 再一個目的。 而這些,我們會看到更多以前長。 和對象也許是一個 最常見的數據結構 在一個基於JavaScript的 方案,因為它允許 您可以任意關聯 鍵值對剛 像PHP的關聯數組 而就像你自己的哈希表 或嘗試為我們實施 在幾個星期前。 因此,讓我們真正看到了什麼 我們可以用JavaScript做。 特別是,這是 功能一籮筐 該瀏覽器有 讓我們上鉤的JavaScript 成以下述方式一個網站。 JavaScript是經常被用來作為 客戶端腳本語言。 它不會被編譯。 它也被解釋。 但是,與PHP,其中已經運行 在服務器上,在Web服務器中, 或者是內心深處 客戶端的JavaScript 是在於它不同 通常運行在瀏覽器中。 所以任何JavaScript代碼,你開始寫作 為PSET 8,或者你的最終項目, 或者在現實世界中,通常會 保存在服務器上,絕對 在一個點的HTML或點 JS的JavaScript文件。 但瀏覽器會 下載的JavaScript 碼到您自己的Chrome瀏覽器的情況下, 或IE或Firefox,或什麼的。 和代碼實際上是要得到 你自己的瀏覽器內執行。 只是為了讓這個更真實, 讓我們來看看這個的具體形式。 我們不知道這個代碼 沒有通過它真的讀。 但是,讓我去Facebook.com 無需登錄。 讓我去檢查元素和去, 比方說,網絡並重新加載頁面。 我們將see--讓我轉變的刷新 頁面獲得所有的請求到新的。 和的第一 文件我看到的是CSS,CSS。 這裡的第一個 JavaScript文件,我有 不知道這是什麼一樣,但在這裡 是一些JavaScript代碼 驅動Facebook的。 它甚至不是真的 揭示進行放大。 它仍然是一樣荒謬。 但是你會看到,即使向下跌破,有 更是這些JavaScript文件。 哎呦。 這是一個平。 讓我們往下走一點點 另外,進一步,還。 還有一個。 還有一個。 還有一個。 因此,即使Facebook的,後面的 場景,被寫入在PHP部 與Facebook的自己的版本物, 有大量的JavaScript的。 事實上,任何一種 聊天你在Facebook上, 任何內聯時間表更新 這是實時發生的,所有這一切 是由JavaScript驅動。 是嗎? 聽眾:我不知道 如果是這樣的Facebook, 但我認為,Facebook開發 他們自己內部的代碼語言? DAVID馬蘭:他們做到了。 所以這就是為什麼我說的方差 PHP的所謂嘻哈,他們實際上是 添加的功能,以使得當 馬克首次實施的Facebook, 它是用PHP編寫的。 排序的,並一直保持 的前端語言的排序 它們用於多 其編碼,但它的 一直沒有語言的 擴展特別十億 人。 因此,他們都增加了自己 改進幕後。 和它們使用任意數量 其他語言 為各條 他們的基礎設施。 所以,是的,這是一個變化 我們現在所知道的PHP。 因此,讓我們一起來看看 在一些例子 對我們如何使用JavaScript在這裡。 在今天的源代碼,我們有 一堆文件,其中第一個, 讓我們叫DOM為零。 所以DOM零如下所示。 讓我進入這個目錄 開放domzero.html, 其中的頂部具有一個文檔類型 聲明說:這裡來的HTML 5。 現在這裡是一個HTML標籤。 這裡的head標籤。 下面是今天有什麼新鮮事。 我們現在有一個腳本標籤 內的頁面的頭部。 而這顯然是不 很少,但是公告 我已經定義了一個 腳本的腳本。 和作為一邊,因為這 是一種常見的誤解, JavaScript有絕對沒有 做Java的語言 有些人可能 已經學會了在APCS。 它更多的是營銷 比什麼都重要的事情, 以前騎的Java多年的燕尾服。 但JavaScript的,無關 Java的,只是類似,並且同樣造成困擾, 容易混淆的名字命名的。 因此,這裡是你如何聲明一個函數 在JavaScript中,從字面上說的功能, 然後該函數的名稱, 那麼任何參數可能需要, 就像在PHP。 原來,在JavaScript中,最為1 存在煩人的功能是預警。 這是一個小窗口, 會彈出並提醒您 到一些信息。 在它的一般皺起了眉頭。 但是,我們將用它作為我們 這裡第一個練習。 注意:JavaScript的一些功能。 單引號和雙引號 實際上並不重要了。 單引號和雙 報價可以互換, 而在C中,你必須使用 雙引號的字符串, 你有兩個單 引用的字符。 在JavaScript的世界裡, 很多人,大多數人 周圍使用字符串單引號 只是因為它是一個風格的東西。 但是,什麼是加號運算符在這裡, 這是我們以前從未見過的? 聽眾:串聯。 DAVID馬蘭:級聯。 所以C甚至沒有了。 PHP具有點運算符, 它執行此操作。 JavaScript有加號運算符, 而令人困惑的是Java一樣。 現在,這是怎麼回事嗎? 所以,這裡的地方基本 那張照片的理解 我們扔了一對夫婦 日前進場。 還記得我們有一個簡單的 版本的HTML page-- 它只是說,你好世界。 然後我們畫了一棵樹 到右側,這 有一堆矩形和線條 連接它們就像一個家庭樹。 這就是所謂的DOM 或文檔對象模型。 而事實證明,你可以訪問 在語法樹的矩形 像下面這樣。 你從字面上說的文件,這是一個 在JavaScript特殊的全局變量 程序,它具有這樣的功能 與之相關聯,可以訪問 類似結構,但你根本 說點,然後函數名, 通過ID獲得的元素。 我想要得到的元素是 顯然報價所享有的名字。 然後,我想它的價值。 現在,我們正在超越自我。 我甚至不知道什麼 這一切是什麼。 讓我們快進到HTML上 的頁面,這是超級簡單。 我已經定義的通知 形成一個倒在這裡。 請注意,我已經給它一個獨特的 ID,即使我們不使用 此屬性之前。 但是,這存在於HTML。 你可以唯一地標識了一些大塊 的HTML像這樣的標識符。 請注意,現在this--原來的HTML 支持,每說籮筐 剛才,一個整體 一堆的事件處理程序。 而這個事件處理程序上說,提交。 在用戶提交本 窗體,調用以下代碼。 而代碼是怎麼回事 被稱為或執行 正是這一點,希臘 隨後返回false功能。 一切應 是相當熟悉的。 這裡是文本類型的輸入,其 的ID,在這種情況下,將是名稱。 我們沒有一個實際的name屬性 這個時間 - 和一個提交按鈕。 因此,所產生的頁面看起來是這樣的。 所得的行為, 你會看到,看起來是這樣的。 該頁面是本地主機說,你好 大衛,幾乎沒有一個美觀 的方式來迎接用戶。 但是,什麼是真正回事? 那麼,考慮這是什麼。 這是一個文本字段。 並根據 HTML在這裡,我已經給它 一個唯一的標識符 所謂的報價所享有的名字。 同時,我已經說過了,當 用戶提交此表單 通過按Enter鍵或單擊Submit 按鈕,撥打叫迎功能 然後返回False。 讓我們考慮那些相反。 請注意,當我點擊提交時, 當前頁的URL不改變。 瀏覽器的圖標 未開始旋轉。 我沒有去任何地方,這是 從字面上因為我說返回False。 返回False短路或停止 窗體的默認行為。 讓那麼留給我們 這最後一個問題。 什麼是問候呢? 好了,迎接顯然 調用一個調用的函數 警報,通過在一個 長的說法是 串聯起來的結果 一堆的子字符串,你好逗號分隔, 那麼無論這個返回。 因此,文件就像是一個全球性的 變量是樹的根, 調用一個特殊的功能, 否則現在被稱為方法。 一個函數,它是 內的一個變量是 叫的方法,而不是一個函數。 因此,獲得了元素的ID。 哪些因素你 希望通過它的ID來獲得? 引用所享有的姓名和 那麼具體數值。 所以,換句話說,代碼簡單 找到ID為名稱的文本字段 然後獲取其值。 所以,如果我要改變這 並說達文,而不是大衛, 並點擊提交,現在我們 有一個問候的達文。 好吧,讓一切優秀和良好。 但是讓我們看看我們能不能做 這一點,因為剛剛清洗劑 編寫這樣的代碼是 一般會在被皺起了眉頭。 這是要去看看可怕。 但是,什麼是第一 你注意這裡的區別 在這個版本中除了 名稱更改為DOM呢? 什麼結構上看起來不一樣 這個相對於其他的? 是嗎? 聽眾:是的形式 現在的劇本之上? DAVID馬蘭:是啊,形式之上 的腳本,一些奇怪的原因。 所以這是第一件事情 即跳出我了。 謝天謝地,至少, 這部分是相同的。 這樣看來唯一 有所不同的就是這個。 因此,這裡是什麼整潔 關於JavaScript 2。 它使得它很難 了解乍看之下, 尤其是對於最後的項目,如果 你看的代碼示例在線, 但它歸結為一些 基本的句法特徵。 這裡又是 全局變量的文件。 這裡再次的是,方法或函數 上面寫著得到了ID的元素。 這一次,我想 拿到所謂演示的ID。 哪裡是? 這顯然是正確的 在這裡,形式本身。 現在發現,顯然,如果我 取回從樹節點 表示形式 本身,而不是一個文本字段, 事實證明,形式,即 從樹節點或矩形, 有什麼,我們會打電話給一個屬性, 非常,非常,非常相似 在精神上要在C的結構這只是 這個矩形的內部數據成員。 所以,我有形式 在這裡,我安裝, 或者我指定,其對提交 處理器或者更確切地說,在提交財產 下面的函數。 這是迄今為止,最瘋狂 事情至此語法。 原來,在JavaScript中和 PHP,並坦言在C此事, 即使我們不這樣做,你可以 添加無名,匿名,或者AKA拉姆達 沒有一個名字的函數 但還是能夠調用。 那麼,我在這裡做的,我分配 這在提交屬性,它 是我的DOM樹中的該節點的內部,一 函數,函數指針,如果你願意。 該函數沒有 名字,但也不至於 重要,因為我們將看到 在某一時刻如何調用它。 當這個函數被調用, 這段代碼被執行,然後 假的是就像之前交回。 但是請注意,我做了什麼。 在這一點上,在 故事,我有一個表格。 它有所謂演示一個唯一的ID。 到這裡,我有一個腳本標籤 其執行以下代碼。 它連接到該節點 樹它是在提交 物業該功能在這裡。 而剛剛通過的瀏覽器是如何工作的性質, 當我現在單擊提交或按Enter鍵, 該功能將會被調用。 它並不需要,因為誰名字 到底在乎它叫什麼。 它永遠會得到的唯一一次 所謂的是,當我提交表單。 有沒有必要對我來說, 人類的開發, 真正把它叫做任何其他地方。 現在,就像一個玩笑話,好像這就是 不介意彎曲不夠, 我們甚至可以這樣 看起來更神秘使用 一個超級流行的庫稱為jQuery的。 事實上jQuery和JavaScript的 經常混為一談。 而我們要做的就是週三開始 使用這種語言,這些庫 建設日益異步 和動態應用 像圖讓 應用程序,應用程序 即實​​時更新的網頁 時間,就像Facebook或谷歌聊天軟件 這樣做,並且不再把自己局限在 通過一個GET或​​只是擊中後提交 孤單。 所以,我會看到你在週三。 [音樂播放]