首頁  >  文章  >  後端開發  >  關於PHP安全程式設計的一些建議

關於PHP安全程式設計的一些建議

王林
王林轉載
2019-08-20 10:27:221694瀏覽

簡介

要提供網路服務,在開發程式碼的時候必須隨時保持安全意識。可能大部分 PHP 腳本都對安全問題不在意,這很大程度是因為有大量的無經驗程式設計師在使用這門語言。但是,沒有理由讓你因為對你的程式碼的不確定性而導致不一致的安全性策略。當你在伺服器上放任何涉及到錢的東西時,就有可能會有人嘗試破解它。創建一個論壇程式或任何形式的購物車,被攻擊的可能性就上升到了無窮大。

推薦PHP影片教學:https://www.php.cn/course/list/29/type/2.html

背景

為了確保你的web 內容安全,這裡有一些常規的安全準則:

1、別相信表單

##攻擊表單很簡單。透過使用一個簡單的 JavaScript 技巧,你可以限制你的表單只允許在評分域中填寫 1 到 5 的數字。如果有人關閉了他們瀏覽器的 JavaScript 功能或提交自訂的表單數據,你客戶端的驗證就失敗了。

使用者主要透過表單參數和你的腳本交互,因此他們是最大的安全風險。你該學到什麼呢?在 PHP 腳本中,總是要驗證 傳遞給任何 PHP 腳本的資料。在本文中,我們向你們示範如何分析和防範跨站腳本(XSS)攻擊,它可能會劫持使用者憑證(甚至更嚴重)。你也會看到如何防止會玷污或破壞你資料的 MySQL 注入攻擊。

2、別相信使用者

假定你網站取得的每一份資料都充滿了有害的程式碼。清理每一部分,即便你相信沒有人會嘗試攻擊你的網站。

3、關閉全域變數

你可能會有的最大安全漏洞是啟用了

register_globals 設定參數。幸運的是,PHP 4.2 及以後版本預設關閉了這個配置。如果打開了 register_globals,你可以在你的php.ini 檔案中透過改變register_globals 變數為Off 關閉該功能:

register_globals = Off

新手程式設計師覺得註冊全域變數很方便,但他們不會意識到這個設定有多危險。一個啟用了全域變數的伺服器會自動為全域變數賦任何形式的參數。為了了解它如何運作以及為什麼有危險,讓我們來看一個例子。

假設你有一個稱為

process.php 的腳本,它會在你的資料庫中插入表單資料。初始的表單像下面這樣:

<input name="username" type="text" size="15" maxlength="64">

運行

process.php 的時候,啟用了註冊全域變數的 PHP 會將該參數賦值到 $username 變數。這會比透過$_POST['username'] 或 $_GET['username'] 存取它來節省擊鍵次數。不幸的是,這也會給你留下安全性問題,因為PHP 會設定該變數的值為透過GET 或POST 的參數發送到腳本的任何值,如果你沒有顯示地初始化該變數並且你不希望任何人去操作它,這會有一個大問題。

看下面的腳本,假如

$authorized 變數的值為 true,它會給使用者顯示通過驗證的資料。正常情況下,只有當使用者正確通過了這個假想的 authenticated_user() 函數驗證,$authorized 變數的值才會被設定為真。但如果你啟用了 register_globals,任何人都可以傳送一個 GET 參數,例如 authorized=1 去覆寫它:

<?php
// Define $authorized = true only if user is authenticated
if (authenticated_user()) {
    $authorized = true;
}
?>

这个故事的寓意是,你应该从预定义的服务器变量中获取表单数据。所有通过 post 表单传递到你 web 页面的数据都会自动保存到一个称为 $_POST 的大数组中,所有的 GET 数据都保存在 $_GET 大数组中。文件上传信息保存在一个称为 $_FILES 的特殊数据中。另外,还有一个称为 $_REQUEST 的复合变量。

要从一个 POST 方法表单中访问username字段,可以使用 $_POST['username']。如果 username 在 URL 中就使用$_GET['username']。如果你不确定值来自哪里,用 $_REQUEST['username']

<?php
$post_value = $_POST[&#39;post_value&#39;];
$get_value = $_GET[&#39;get_value&#39;];
$some_variable = $_REQUEST[&#39;some_value&#39;]; 
?>

$_REQUEST $_GET$_POST、和 $_COOKIE 数组的结合。如果你有两个或多个值有相同的参数名称,注意 PHP 会使用哪个。默认的顺序是 cookiePOST、然后是 GET

以上就是为大家整理的一些编程安全建议。更过相关问题请访问PHP中文网:https://www.php.cn/

以上是關於PHP安全程式設計的一些建議的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:开发者头条。如有侵權,請聯絡admin@php.cn刪除