PHP 安全函数:strip_tags、filter_var、Md5 和 sha1

潜在的安全威胁

基本上有两组人可以攻击你的系统

  • 黑客——意图获取未经授权的数据或破坏应用程序
  • 用户——他们可能会无意中在表格中输入错误的参数,这可能会对网站或网络应用程序产生负面影响。

以下是我们需要警惕的攻击类型。

SQL注入 – 此类攻击将有害代码附加到 SQL 声明。

这是通过使用用户输入表单或使用变量的 URL 来完成的。

附加的代码注释了 SQL 语句的 WHERE 子句中的条件。附加的代码还可以:

  • 插入一个始终为真的条件
  • 从表中删除数据
  • 更新表中的数据
  • 此类攻击通常用于获取对应用程序的未经授权的访问。

跨站脚本 - 这种类型的攻击通常会插入有害代码 Java脚本。这是使用用户输入表单(例如联系我们和评论表单)完成的。这样做是为了;

  • 检索敏感信息,例如 Cookie 数据
  • 将用户重定向到不同的 URL。
  • 其他威胁包括 - PHP 代码注入、Shell 注入、电子邮件注入、脚本源代码泄露等。

PHP 应用程序安全最佳实践

现在让我们看看在开发应用程序时必须考虑的一些 PHP 安全最佳实践。

PHP strip_tags

strip_tags 函数删除 HTML, JavaScript 或字符串中的 PHP 标签。

当我们必须保护我们的应用程序免受跨站点脚本等攻击时,此功能很有用。

让我们考虑一个接受用户评论的应用程序。

<?php

$user_input = "Your site rocks";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

假设您已将 comments.php 保存在 phptuts 文件夹中,请浏览到 URLhttp://localhost/phptuts/comments.php

PHP strip_tags

假设您收到以下用户输入alert(‘Your site sucks!’);

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

浏览到 URL http://localhost/phptuts/comments.php

PHP strip_tags

现在让我们使用 strip_tags 函数保护我们的应用程序免受此类攻击。

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

浏览到 URL http://localhost/phptuts/comments.php

PHP strip_tags

PHP filter_var 函数

filter_var 函数用于验证和清理数据。

验证检查数据是否属于正确类型。对字符串进行数字验证检查会返回错误结果。

清理是指从 绳子.

查看此链接获取完整参考 过滤器变量

该代码用于评论系统。

它使用 filter_var 函数和 FILTER_SANITIZE_STRIPPED 常量来去除标签。

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);

?>

输出:

alert('Your site sucks!');

mysqli_real_escape_string 函数该函数用于保护应用程序免受 SQL 注入。

假设我们有以下用于验证用户 ID 和密码的 SQL 语句。

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

恶意用户可以在用户 ID 文本框中输入以下代码。' OR 1 = 1 — 密码文本框中输入 1234 让我们编写身份验证模块

<?php

$uid = "' OR 1 = 1 -- ";

$pwd = "1234";

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

最终结果将是

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

这里,

  • “SELECT * FROM users WHERE user_id = ” 测试用户 ID 是否为空
  • “' OR 1 = 1 “ 是一个永远为真的条件
  • “--”注释掉测试密码的部分。

上述查询将返回所有用户现在让我们使用 mysqli_real_escape_string 函数来保护我们的登录模块。

<?php

$uid = mysqli_real_escape_string("' OR 1 = 1 -- ");

$pwd = mysqli_real_escape_string("1234");

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

上述代码将输出

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

备注 第二个单引号已为我们转义,它将被视为用户 ID 的一部分,并且密码将不会被注释。

PHP Md5 和 PHP sha1

Md5 是消息摘要 5 的缩写,sha1 是安全散列算法 1 的缩写。

它们都用于加密字符串。

一旦字符串被加密,解密就非常麻烦。

在数据库中存储密码时,md5 和 sha1 非常有用。

下面的代码展示了md5和sha1的实现

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

假设您已将文件 hashes.php 保存在 phptuts 文件夹中,请浏览到 URL

PHP Md5 和 PHP sha1

从上面的哈希值可以看出,如果攻击者获得了数据库的访问权限,他们仍然不知道登录的密码。

总结

  • 安全性是指为保护应用程序免受意外和恶意攻击而采取的措施。
  • strip_tags 函数用于删除标签,例如来自输入数据
  • filter_var 函数验证并清理输入数据
  • mysqli_real_escape_string 用于清理 SQL 语句。它会从语句中删除恶意字符
  • MD5和SHA1都用于加密密码。