亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP SQL 錯誤幫助和安全改進

PHP SQL 錯誤幫助和安全改進

PHP
滄海一幻覺 2022-12-23 16:10:56
我的網站上有一些代碼檢查數據庫中是否存在輸入字段的輸入值,然后盡可能簡單地輸出結果。不幸的是,如果發送了錯誤的值,它不會給我“找不到結果”。1 - 我該如何解決這個問題?沒有錯誤消息或其他任何內容,只有一個白頁。2 - 另一個問題:公眾是否可以使用這種類型的輸入字段檢查來獲取我的數據庫登錄憑據,并使用單獨的 search.php 將登錄憑據放在文件頂部?3 - 我怎樣才能用我的 php 代碼保護這個檢查免受任何主要攻擊?我認為 SQL 注入已經被阻止了。謝謝索引.php:<form action="search.php" method="Post">    <input type="text" name="query" />    <input type="submit" value="Search" /></form>搜索.php:<?php$mydatabase=mysqli_connect("localhost", "root", "") or die("Error connecting to database: ".mysql_error());mysqli_select_db($mydatabase, "mydb") or die(mysql_error());$query = $_POST['query']; $min_length = 1;if(strlen($query) >= $min_length){  $query = htmlspecialchars($query);   $query = mysqli_real_escape_string($mydatabase, $query);  $raw_results = mysqli_query($mydatabase, "SELECT * FROM mytable WHERE (`title` LIKE '%".$query."%')") or die("mysql_error()");  while($results = mysqli_fetch_array($raw_results)){    if (empty($results)) {       echo 'No results found';     } else {       echo "<p><h3>".$results['title']."</h3>".$results['name']."</p>";    }  }} else{  echo "Minimum length is ".$min_length;}?>
查看完整描述

1 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

問題 1 的答案mysqli_fetch_array
的手冊頁提醒您,如果結果集中沒有行,它將返回。If gets set to your loop will never run and that is why you never see your No results found消息。您需要在循環外進行空檢查或將其切換到do-while循環。NULL$resultsNULLwhilewhile

問題 2 的答案
我不確定我是否完全理解您的要求,但只要您的憑據位于.php文件內的 PHP 標記內,就沒有人應該能夠公開看到這些。*

*此聲明肯定有例外。最佳做法是為您的憑據使用環境變量。至少從一個單獨的文件加載全局變量,以防原始 PHP 文件暴露給用戶。在這種情況下,他們只會看到環境變量或全局變量,而不是您的實際憑據。

問題 3 的答案
我認為您使用htmlspecialcharsmysqli_real_escape_string是保護數據庫的良好開端,但您確實應該仔細閱讀這些函數可能帶來的缺點。我傷口建議調查準備好的陳述。PHP 手冊提供了豐富的信息,但是這個SO Answer也做得很好;如果您錯過了我鏈接到另一個答案的鏈接的答案,您也會發現它非常有幫助。


查看完整回答
反對 回復 2022-12-23
  • 1 回答
  • 0 關注
  • 85 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號