网络安全

位置:IT落伍者 >> 网络安全 >> 浏览文章

如何书写安全的PHP代码[2]


发布日期:2022年06月16日
 
如何书写安全的PHP代码[2]

所幸的是这种情况还是很容易避免 通过检查要进入数据库的数据并删除或取消它们 我们可以防止任何人在这个数据库上执行他们自己的SQL语句 函数的方法如下

function make_safe($variable) {$variable = addslashes(trim($variable));return $variable;}

现在修改了我们的执行语句用_POST取代上面的执行变量 我们现在把所有的用户数据通过make_safe函数在以下代码

$username = make_safe($_POST[username]);$password = make_safe($_POST[password]);$check = mysql_query(Select Username Password UserLevel FROM Users Where Username = $username and Password = $password);

现在如果一个用户输入恶意的上述数据查询看上去像下面这样是完全无害 以下查询将选择从数据库中的用户都和\ or = #相等的

Select Username Password UserLevel FROM Users Where Username = \ or = # and Password =

现在除非你曾经提供了一个非常特殊的用户名和空白密码 你的恶意攻击者将不能做任何损害的事 像这样检查所有的数据通过你的数据库是非常重要的尽管你认为这是已经很安全 HTTP头可以由用户伪造 他们参照地址可以伪造浏览器用户字符串可以伪造 不要信任一条用户发送的数据虽然你认为是安全的

文件操作

一些现今的网站的URL是这个样子的

indexphp?page=contactushtml

indexphp文件包括contactushtml文件而且这个网站似乎正常运行 不过用户可以很容易地将contactushtml改成他们自己喜的东西 举例来说 如果您正在使用Apache的mod_auth去保护文件并储存你的密码在一个文件名为htpasswd(传统姓名)里 然后如果用户访问以下地址 脚本将输出你的用户名和密码

indexphp?page=htpasswd

通过改变URL在某些系统中 在另一个可以运行PHP的服务器去引用文件害怕? 你应该害怕 再次所幸的是这是比较容易防范 首先你必须确保正确设置 open_basedir在你的phpini文件并已设置allow_url_fopen Off 这将阻止大多数这类型的攻击以保护远程文件和文件系统 其次如果可以的话请检查文件要求对有效文件 如果你限制了某些文件可以用这个脚本 你可以节省不少后来恶果

使用默认

当mysql是安装它使用了默认用户的root和空白的密码 SQL Server的用途sa作为默认的用户和提供了一个空白的密码 如果有人发现你的数据库服务器地址并想尝试登录 这些都是首次组合他们会尝试 如果你没有设定不同的密码(最好也和用户 那么你很可能一天一觉醒来发现你的数据库已经被删除所有用户号码被盗 和所有软件一样你如果使用的软件是默认用户名和密码改变他们

不要让安装文件在线

很多PHP项目用安装文件来安装 其中有不少是一旦运行就自我删除的但许多不是这样的直到您删除安装文件 如果让安装文件在线请注他们可能仍然可用 有人可以用它来复盖你的整个网站

预见性

试想一下你的网站让一个坏人盯上 这个坏的人要打破你的管理区 改变你的所有产品的描述如这个产品很差劲 我猜测他们首先会去http://wwwyoursitecom/admin/ 万一它存在 将你的敏感文件和文件夹像预测一样他们很容易就受到黑客攻击

为此要确保你的姓名你的敏感文件和文件夹让他们很难猜测 把你的 admin 位于http://wwwyoursitecom/jsfhsfsifuhsi/ 或者更难去写的但它为你的网站添加一些额外的保障如果你需要一个记得快的地址 但不用adminadministration (或你的用户名和密码) 用一些不经常用的

这同样适用于用户名和密码 如果你有管理区不要使用 admin 作为用户名和 password 作为密码 针对一些特殊的情况最好是两个字母和数字(有的黑客利用一些所谓的词典攻击 尝试每一个字在字典里的密码直到他们找到密码添加一对密码使这一类攻击无用) 这也是明智的去定期改变你的密码 (每两个月) 最后要确保当一个用户名输入 Wrong Password 当错误的密码输入时你的错误讯息给没有输出 Unknown Username 恶意用户都知道他们已经成功地猜测一个有效的用户名 对上述两种手段采用通用的登录错误的错误信息 如果是用户名和密码输入错误的恶意用户就没有任何办法设想正确的用户和密码

最后彻底和完全地设想

你假设你的网站不会受到攻击或面要对任何问题的话但当最终出事你将有大量的麻烦 如果在另一方面 假设你的每一个客人到你的网站是为了攻击你你永远处于战争状态 你就能帮助你把你的网站做得安全并准备得没有一点闪失

[] []

               

上一篇:如何书写安全的PHP代码[1]

下一篇:PHP 5.2.9-2发布 修复多项安全漏洞