仿sql注入
SEO:
1,如果最佳化的話 title部分是非常重要的,用來最佳化我們網站的關鍵字的
搜尋引擎會根據關鍵字對你的網站歸類,如果網站權重高的話,當使用者搜尋索引鍵的時候,會先看到你的網站
2,日與網站---指向英文的網站,說明日語的網站給英文的投了一票,如果給英語的網站投的票越多,說明英文的網站越好
防止SQL注入:
1,建一個使用者登入的表單
select() 會查詢出所有的記錄
find() 只會查詢一條記錄
寫一個簡單的使用者名稱驗證,在使用者名稱表單中寫上’or 1 or’也會提示使用者名稱正確,
思考題:為什麼會不驗證就成功了?
echo $model->getLastsql();//列印出sql語句
經過查詢執行的sql語句,我們發現,導致sql注入的原因是單引號
因為:
1,通過php的魔術引號,來將使用者輸入的資料進行轉義
php的低版本,預設是開啟的,這樣會自動的將使用者輸入的資料進行轉義
php.ini中的
是開啟的改為
Magic_quotes_gpc=On
就可以防止驗證正確
2,對使用者提交的資料進行轉義
調用php的addslashes()函數
$username=addslashes($_POST['username']);用addslashes函數處理一下
3,利用thinkphp的系統變數獲得外部資料 $this->_server
thinkphp系統常量 (4個)
$this->_post('username','addslashes');
4,使用數組作為tp架構中 where條件
5、直接把查詢語句寫成
$list=$model->where('user_name="'.$username.'" and dept_id="'.$password.'"')->select();就不會登陸成功了
例:
//仿sql注入public function login(){ $this->display(); }public function verify(){ //使用者名稱'or 1 or'登入會提示登入成功,是不正確的 //方法1修改ini.php $username=$_POST['username']; $password=$_POST['password']; //方法2 /*$username=addslashes($_POST['username']); $password=$_POST['password']; //方法3 $this->_post('username','addslashes'); $password=$_POST['password']; //方法4數組 $cond['user_name']=$username; $cond['dept_id']=$password; $list=$model->where($cond)->find();*/ $model=M('User'); //方法5 // $list=$model->where('user_name="'.$username.'" and dept_id="'.$password.'"')->select(); $list=$model->where("user_name='$username' and dept_id='$password'")->select(); echo $model->getLastsql();//列印出sql語句 if($list){ echo '登入成功'; }else{ echo '登入失敗'; } }
tpl:
<form action="URL/verify" method="post">使用者名稱:<input type="text" name="username">密碼:<input type="text" name="password"><input type="submit" value="提交"></form>
以上講述的就是thinkphp防止sql注入攻擊了,方法不止一種,大家可以嘗試的去寫一下,練練手。
相關推薦:
PHP實現防止SQL注入的方法執行個體