我的服務器管理員最近升級到PHP 5.3,我得到一個奇怪的「錯誤」(或PHP的人有它的feature)。爲了明顯的安全原因,我的大部分字符串表單數據都有mysql_real_escape_string
,但現在看來這個轉義已經由PHP完成了。
<?php
echo $_GET["escaped"];
?>
<form method="get">
<input type="text" name="escaped" />
</form>
此輸出,如果我例如escape 'this test'
,escape \'this test\'
進入。如果我使用POST
而不是GET
,也是如此。
它是直接綁定到5.3升級還是我的管理員可以觸發php.ini文件中的自動切換?另外,我應該如何保持它(如果它確實是一個很好的失敗證明機制,能正確捕獲所有的get和post變量),或者我應該禁用它(如果這甚至是可能的!)並去回到mysql_real_escape_string
?我的膽量告訴我方法2是最好的,但方法1會有些自動化。 :)
編輯:其實,我需要禁用它。有時我會收集表單數據,並在發生錯誤的情況下將其重新發送給客戶表單(即缺少字段),所以我不希望他/她的斜槓出現在任何地方。
還應該注意的是,如果你的'php.ini'文件包含語法錯誤,默認是啓用'magic_quotes_gpc'。因此,如果您認爲您已在配置文件中禁用了'magic_quotes_gpc',則文件可能包含錯誤,導致您的配置無法應用。個人經驗。 :P –