六個常見PHP安全性攻擊
php語言1.38W
瞭解常見的PHP應用程序安全威脅,可以確保你的PHP應用程序不受攻擊。下面是小編整理了六個常見PHP安全性攻擊,歡迎閲讀! 1、SQL注入 SQL注入是一種惡意攻擊,用户利用在表單字段輸入SQL語句的方式來影響正常的SQL執行。還有一種是通過system()或exec()命令注入的,它具有相同的SQL注入機制,但只針對shell命令。 $username = $_POST['username']; $query = "select * from auth where username = '".$username."'";echo $query;$db = new mysqli('localhost', 'demo', ‘demo', ‘demodemo');$result = $db->query($query);if ($result && $result->num_rows) { echo "<br />Logged in successfully";} else { echo "<br />Login failed";} 上面的代碼,在第一行沒有過濾或轉義用户輸入的值($_POST['username'])。因此查詢可能會失敗,甚至會損壞數據庫,這要看$username是否包含變換你的SQL語句到別的東西上。 防止SQL注入 選項: 使用mysql_real_escape_string()過濾數據 手動檢查每一數據是否為正確的數據類型 使用預處理語句並綁定變量 使用準備好的預處理語句 分離數據和SQL邏輯 預處理語句將自動過濾(如:轉義) 把它作為一個編碼規範,可以幫助團隊裏的'新人避免遇到以上問題$query = 'select name, district from city where countrycode=?';if ($stmt = $db->prepare($query) ){ $countrycode = 'hk'; $stmt->bind_param("s", $countrycode); $stmt->execute(); $stmt->bind_result($name, $district); while ( $stmt ($stmt->fetch() ){ echo $name.', '.$district; echo '<br />'; } $stmt->close(); } 2、XSS攻擊 XSS(跨站點腳本攻擊)是一種攻擊,由用户輸入一些數據到你的網站,其中包括客户端腳本(通常JavaScript)。如果你沒有過濾就輸出數據到另一個web頁面,這個腳本將被執行。 接收用户提交的文本內容 <?php if (file_exists('comments')) { $comments = get_saved_contents_from_file('comments');} else { $comments = ''; } if (isset($_POST['comment'])) { $comments .= '<br />' . $_POST['comment']; save_contents_to_file('comments', $comments);} ?> 輸出內容給(另一個)用户 <form action='' method='POST'> Enter your comments here: <br /> <textarea name='comment'></textarea> <br /> <input type='submit' value='Post comment' /> </form><hr /><br /> <?php echo $comments; ?> 將會發生什麼事? 煩人的彈窗 刷新或重定向 損壞網頁或表單 竊取cookie AJAX(XMLHttpRequest) 防止XSS攻擊 為了防止XSS攻擊,使用PHP的htmlentities()函數過濾再輸出到瀏覽器。htmlentities()的基本用法很簡單,但也有許多高級的控制,請參閲 XSS速查表。 3、會話固定 會話安全,假設一個PHPSESSID很難猜測。然而,PHP可以接受一個會話ID通過一個Cookie或者URL。因此,欺騙一個受害者可以使用一個特定的(或其他的)會話ID 或者釣魚攻擊。 4、會議捕獲和劫持 這是與會話固定有着同樣的想法,然而,它涉及竊取會話ID。如果會話ID存儲在Cookie中,攻擊者可以通過XSS和JavaScript竊取。如果會話ID包含在URL上,也可以通過嗅探或者從代理服務器那獲得。 防止會話捕獲和劫持 更新ID 如果使用會話,請確保用户使用SSL 5、跨站點請求偽造(CSRF) CSRF攻擊,是指一個頁面發出的請求,看起來就像是網站的信任用户,但不是故意的。它有許多的變體,比如下面的例子: <img src='_click_to__id=123&item=12345'> 防止跨站點請求偽造 一般來説,確保用户來自你的表單,並且匹配每一個你發送出去的表單。有兩點一定要記住: 對用户會話採用適當的安全措施,例如:給每一個會話更新id和用户使用SSL。 生成另一個一次性的令牌並將其嵌入表單,保存在會話中(一個會話變量),在提交時檢查它。 6、代碼注入 代碼注入是利用計算機漏洞通過處理無效數據造成的。問題出在,當你不小心執行任意代碼,通常通過文件包含。寫得很糟糕的代碼可以允許一個遠程文件包含並執行。如許多PHP函數,如require可以包含URL或文件名,例如: <form> Choose theme: <select name = theme> <option value = blue>Blue</option> <option value = green>Green</option> <option value = red>Red</option> </select> <input type = submit> </form> <?php if($theme) { require($theme.''); } ?> 在上面的例子中,通過傳遞用户輸入的一個文件名或文件名的一部分,來包含以"http://"開頭的文件。 防止代碼注入 過濾用户輸入 在中設置禁用allow_url_fopen和allow_url_include。這將禁用require/include/fopen的遠程文件。 其他的一般原則 1. 不要依賴服務器配置來保護你的應用,特別是當你的web服務器/ PHP是由你的ISP管理,或者當你的網站可能遷移/部署到別處,未來再從別處遷移/部署在到其他地方。請在網站代碼中嵌入帶有安全意識的檢查/邏輯(HTML、JavaScript、PHP,等等)。 2. 設計服務器端的安全腳本: —例如,使用單行執行 - 單點身份驗證和數據清理—例如,在所有的安全敏感頁面嵌入一個PHP函數/文件,用來處理所有登錄/安全性邏輯檢查3. 確保你的代碼更新,並打上最新補丁。
-
PHP編程常用技巧四則
PHP具有非常強大的功能,所有的CGI的功能PHP都能實現。下面就來和小編一起看看PHP編程常用技巧四則吧。1.配置PHP文件目錄作為服務器端解釋執行的腳本語言,PHP程序放置在某個服務器可以訪問的目錄下,一般可以通過修改Apache的進行配置,例如我們在該文件中的一句:Ali...
-
ThinkPHP中自動驗證
學無止境,剛開始學習PHP會覺得簡單,但是越學會越難。下面是小編整理的關於ThinkPHP中自動驗證的知識,希望對大家有用,更多消息請關注應屆畢業生網。ThinkPHP中自動驗證:array(‘字段’,‘驗證規則’,‘錯誤提示’[,‘驗證條件&rsqu...
-
PHP程序員基本要求和必備技能
PHP程序員有什麼必備知識呢?以下是本站小編精心為大家整理的PHP程序員基本要求和必備技能,希望對大家成為程序員有所幫助!更多內容請關注應屆畢業生網!一名PHP程序員的基本要求:1、精通html、CSS、JS等網站前端技術。2、掌握PHP編程技術。3、瞭解Linux及Apache、...
-
php是什麼大綱
導讀:時至今日,仍有無以數計的童鞋出於各種渠道瞭解仍要來學習php,那麼對於新手來説,對php有一個清晰的認知則是很有必要的。Php是什麼?PHP是一種創建動態交互性站點的強有力的服務器端腳本語言。PHP是免費的,並且使用非常廣泛。同時,對於像微軟ASP這樣的競爭者來説,P...