1) 當需要把用戶輸入的內容,有可能包含單引號、雙引號 、反斜線、空字元 NUL,到mysql的語句中執行時,應該把APACHE中的magic_quotes_gpc項設成On.
如果APACHE中的此項設成Off時,也可用php的函數addslashes()達到相同的目的,但這兩種手段不能同時使用,否則會出現重復替換,出現錯誤.
樣例PHP代碼如下:
- <?php
- if (get_magic_quotes_gpc()) {
- $content=$_POST["content"];
- } else {
- $content=addslashes($_POST["content"]);
- }
- ?>
當然,如果APACHE中的magic_quotes_gpc項為On,但有時又不想轉義某項的特殊字符,可以使用stripslashes()去掉其中的 /.
2) 過濾影響MSSQL正常運行的字符。
當需要把用戶輸入的內容,有可能包含單引號,到mssql的語句中執行時,應該把APACHE中的magic_quotes_sybase項設成On,此時magic_quotes_gpc項不再生效.
如果APACHE中的此項設成Off時,php中并沒有合適的函數達到相同的目的,只能使用字符串替換函數來達到此目的.
樣例,PHP代碼:
- <?php
- $content=str_replace("'","''"$_POST["content"]);
- ?>
現在10.218.17.53上的PHP既要訪問mysql又要訪問mssql,APACHE中的設置不能兼顧兩種數據庫,所以只對mysql做了相應設置.
2. 應對用戶輸入包含SQL語句的一個措施。
以下兩種SQL寫法都比較普遍,但安全程度是不同的,當用戶提交的$id='1 and 1=2 union select ...'時第一種就會顯示出不該顯示的數據,而第二種就相對安全些.
SQL代碼:
Select * FROM article Where articleid=$id
Select * FROM article Where articleid='$id'
3. 防止用戶輸入的內容因包含html標簽或javascript而影響頁面的正常顯示,可以用htmlspecialchars()過濾其中的 & " < >,PHP代碼:
$content = htmlspecialchars($content);
4. 當頁面要顯示的內容包含回車換行時,可以使用nl2br()來達到頁面上換行的效果.
方法一.
- <?php
- function chkstr($paravalue,$paratype) //過濾非法字符
- {
- if($paratype==1)
- {
- $inputstr=str_replace("'","''",$paravalue);
- }
- elseif($paratype==2)
- {
- $inputstr=str_replace("'","",$paravalue);
- }//開源代碼Vevb.com
- return $inputstr;
- }
- $user1=chkstr($_GET["user"],1);
- $user2=chkstr($_GET["user"],2);
- //$user=$_GET["user"];
- print "方式1-----------------<br>";
- print "$user1 <br>";
- print "方式2-----------------<br>";
- print "$user2 <br>";
- ?>
方法二.
- <?php
- //用法:qstr($str, get_magic_quotes_gpc())
- function qstr($string, $magic_quotes=false, $tag=false)
- {
- $tag_str = '';
- if ($tag) $tag_str = "'";
- if (!$magic_quotes) {
- if (strnatcmp(PHP_VERSION, '4.3.0') >= 0) {
- return $tag_str.mysql_real_escape_string($string).$tag_str;
- }
- $string = str_replace("'", "[url=file:////]//'[/url]" , str_replace('//', '////', str_replace("/0", "[url=]///0[/url]", $string)));
- return $tag_str.$string.$tag_str;
- }
- return $tag_str.str_replace('//"', '"', $string).$tag_str;
- }
- ?>
新聞熱點
疑難解答