猿问

PHP如何安全地使用$_GET

本人新手,在《PHP安全编码》中提到“不要直接使用$_GET”,同时又提到“可以尝试在php.ini中开启magic_quotes_gpc,这样对于所有由用户GET、POST、COOKIE中传入的特殊字符都会转义”,我很纠结,是否开启magic_quotes_gpc就可以直接使用$_GET?

如下面例子中的代码本人感觉很不安全,因为没有做验证,但又不知道如何改进,希望大神能帮忙,谢谢。

<?php

    $name = $_GET["name"];

    $user = $_GET["user"];

    mysql_query("SELECT $name FROM $user");


噜噜哒
浏览 1141回答 2
2回答

潇湘沐

1. 像用户名这种有格式的东西,应该取到之后马上用正则表达式验证,比如preg_match('/\A\w{6,14}\z/', $user)就验证了它是不是6~14位的数字字母下划线。不要使用系统自带的filter,那个管不了什么用。2. 不要使用mysql开头的函数,要使用mysqli,而且最好进行参数化查询而不是addslashes,后者会有编码问题。3. 输出html的时候,默认使用htmlspecialchars,这个函数可以指定编码。或者你可以用现成的模板引擎。4. 比较字符串的时候,强制使用strcmp,不要使用双等号。5. 不要使用$_REQUEST。这样可以防掉95%。至于magic_quotes_gpc,应该早就废了吧。
随时随地看视频慕课网APP
我要回答