php資料庫安全
這個是不會的,只要其它人沒有許可權訪問你的文件就可以,例如從伺服器,FTP,網站後台文件瀏覽之類的,只從前台界面是拿不到php裡面的變數(不包括網站漏洞)。
⑵ 如何實現php的安全最大化怎樣避免sql注入漏洞和xss跨站腳本攻擊漏洞
使用php安全模式
伺服器要做好管理,賬號許可權是否合理。
假定所有用戶的輸入都是「惡意」的,防止XSS攻擊,譬如:對用戶的輸入輸出做好必要的過濾
防止CSRF,表單設置隱藏域,post一個隨機字元串到後台,可以有效防止跨站請求偽造。
防禦SQL注入。
避免SQL注入漏洞
1.使用預編譯語句
2.使用安全的存儲過程
3.檢查輸入數據的數據類型
4.從資料庫自身的角度考慮,應該使用最小許可權原則,不可使用root或dbowner的身份連接資料庫。若多個應用使用同一個資料庫,也應該為資料庫分配不同的賬戶。web應用使用的資料庫賬戶,不應該有創建自定義函數,操作本地文件的許可權。
避免XSS跨站腳本攻擊
1.假定所有用戶輸入都是「邪惡」的
2.考慮周全的正則表達式
3.為cookie設置HttpOnly,防止cookie劫持
4.外部js不一定可靠
5.出去不必要的HTML注釋
6. 針對非法的HTML代碼包括單雙引號等,使用htmlspecialchars()函數。
⑶ php連接sql資料庫安全
其實的問題題目是正確的,只是這個問題內容有點讓我不理解。
資料庫鏈接SQL安全在於如何防止注入和別的溢出什麼,
這些都是一個良好的編碼習慣,懂得過濾和相關的代碼規范
至於你說的mysql 明文username password。是這樣的。
而且config文件會被下載,只有一種可能那就是你伺服器問題了。
在我們掛載的伺服器上,是不可能直接讀取源文件。只有經過伺服器端編譯過後的文本會通過CGI傳輸到用戶電腦中,這個時候看到的不是文件本身,而是編譯出來的數據,至於想拿到密碼和用戶名。OK。入侵伺服器吧。當然。如果伺服器夠爛。很是很快的。。
所以我覺得你的擔心是多慮的,你可以去了解下伺服器對於文本的控制。
順便提點名詞你認識下。。MVC,單入口模式。
希望對你有幫助,我是從事PHP開發很久了。
⑷ thinkphp真的安全嗎
測試:下載thinkphp的當前最新版本ThinkPHP_3.2,我們來看看代碼,用事實說話,在sql注入防止上。thinkphp的處理方式
ThinkPHP\Library\Think\Model.class.php裡面有如下的代碼
protected function parseSql($sql,$parse) {
// 分析表達式
if(true === $parse) {
$options = $this->_parseOptions();
$sql = $this->db->parseSql($sql,$options);
}elseif(is_array($parse)){ // SQL預處理
$parse = array_map(array($this->db,'escapeString'),$parse);
$sql = vsprintf($sql,$parse);
}else{
$sql = strtr($sql,array('__TABLE__'=>$this->getTableName(),'__PREFIX__'=>C('DB_PREFIX')));
}
$this->db->setModel($this->name);
return $sql;
}
array_map(array($this->db,'escapeString'),$parse);
關鍵是調用了對應的資料庫類型裡面的escapeString進行處理。因為php通常和mysql作為搭配,我就看了一下mysql的處理。裡麵包括了mysql和mysqli的處理代碼
mysql版本的處理
public function escapeString($str) {
if($this->_linkID) {
return mysql_real_escape_string($str,$this->_linkID);
}else{
return mysql_escape_string($str);
}
}
mysqli的處理方式。
public function escapeString($str) {
if($this->_linkID) {
return $this->_linkID->real_escape_string($str);
}else{
return addslashes($str);
}
}
看似很正常的處理方式,但是你們明白addslashes、mysql_escape_string、mysql_real_escape_string它們的真正的安全性嗎,下面這些文章會讓你明白的。
按照文章的說明,測試代碼test.php,文件保存為gbk格式測試一下就明白addslashes安全性了
<?php
error_reporting(0);
header('Content-Type: text/html; charset=gbk');
$username = $_POST['username'];
$sqlx="select id,isDisplay from user where usname='".addslashes($username)."' and passwd='$password'";
echo $sqlx;
echo "<br>";
echo addslashes($username);
echo 444;
?>
<form action="" method=post>
<input type=text name="username" value="">
<input type=submit>
</form>
下面還有一個連接地址,詳細說明了關於addslashes、mysql_escape_string、mysql_real_escape_string的安全性問題。而且這個問題早在2006年就被提出了哦,thinkphp還是不重視
最後說一句,按照php官方說法,最好用pdo的預處理,看看thinkphp的封裝,完全是誤人子弟
ThinkPHP\Library\Think\Db\Driver\Pdo.class.php
protected function parseValue($value) {
if(is_string($value)) {
$value = strpos($value,':') === 0 ? $this->escapeString($value) : '\''.$this->escapeString($value).'\'';
}elseif(isset($value[0]) && is_string($value[0]) && strtolower($value[0]) == 'exp'){
$value = $this->escapeString($value[1]);
}elseif(is_array($value)) {
$value = array_map(array($this, 'parseValue'),$value);
}elseif(is_bool($value)){
$value = $value ? '1' : '0';
}elseif(is_null($value)){
$value = 'null';
}
return $value;
}
public function escapeString($str) {
switch($this->dbType) {
case 'PGSQL':
case 'MSSQL':
case 'SQLSRV':
case 'MYSQL':
return addslashes($str);
case 'IBASE':
case 'SQLITE':
case 'ORACLE':
case 'OCI':
return str_ireplace("'", "''", $str);
}
}
⑸ php+mysql這種情況下如何保證我的資料庫信息的安全
建立一個鏈接文件:如conn.php,然後用zend將conn.php文件加密就可以了。
conn.php代碼如下:
<?php
$mysql_server_name='localhost';
$mysql_username='root';
$mysql_password='12345678';
$mysql_database='mycounter';
$conn=@mysql_connect($mysql_server_name,$mysql_username,$mysql_password);
if ($conn) {
if (!@mysql_select_db($mysql_database))
{
die("選擇資料庫是失敗");
}
}
else
{
die("資料庫連接失敗");
}
?>
⑹ php在鏈接資料庫時候,代碼里需要填寫鏈接資料庫的地址和帳號密碼,如何保證這些信息的安全
無論應用伺服器和資料庫伺服器是否在同一台服務機器上,mysql都有相應的訪問控制,比如可以設置為某個IP,如果像你這樣寫的代碼的話,那麼表示應用伺服器和資料庫伺服器是在同一個機器上的,當mysql將訪問控制在應用伺服器的那台機器上時,其他的機器連接就沒有什麼用了。當然,也不是說就完全沒有辦法破解,只是相對來說比較難了。
⑺ PHP數據如何安全的輸入輸出
你的表單的name比如是title 你提交的時候 過濾一下 可以用 mysql_escape_string($title);
這個函數是可以過濾一些特殊的字元,你提交數據的時候 用$t=$_POST('$title');先得到你的這個表單的內容,然後用
$sql="Insert into 表 values ('$t')";
$result=mysql_query($sql);
if($result)
{
echo "success";
}
else
{
echo "false";
}
這個是插入的
$sql="select * from 表";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
echo $row['b']."<br/>";
}
這個是輸出你剛才插入的內容的語句
希望對你有幫助
⑻ php如何防止寫資料庫沖突
打開資料庫時,用寫鎖定模式,這樣只允許單個進程寫操作。
⑼ php連接資料庫的時,帳號,密碼的安全問題!
使用zend guard對php源文件進行加密,加密之後的php源文件就變成了亂碼,當然計算機是認識這些亂碼的哈。
⑽ php登錄資料庫,密碼都直接寫在程序里嗎不怕安全問題啊
密碼都通過加密然後存如資料庫
也就是說密碼不是明文存儲的,登錄的時候對比的是加密後的hash