gpt4 book ai didi

php - 逃避 MySQL 注入(inject)和过滤 XSS 攻击尝试的正确方法

转载 作者:行者123 更新时间:2023-11-29 06:06:14 28 4
gpt4 key购买 nike

我需要在这里检查一些东西,我知道他们用一些代码过滤掉了输入,因为输入是在一行代码中获得的,这里我是在获取代码后按顺序完成的,这也可以接受吗?或者我是否必须找出某种方法来过滤和转义一行中的数据,同时获取数据?这是我正在谈论的内容的示例...

  // Get data and prevent XSS attack
$user = htmlentities($_POST['email'], ENT_QUOTES, 'UTF-8');
$pass = htmlentities($_POST['pass'], ENT_QUOTES, 'UTF-8');

// MySQL Injection prevention
$userdata = mysql_real_escape_string($user);
$passdata = mysql_real_escape_string($pass);

想法?

我在这里试图实现的主要目标是逃避 MySQL 注入(inject)尝试并防止 XSS 攻击

最佳答案

Key objective I'm trying to achieve here is to escape a MySQL injection attempt AND prevent an XSS attack

你不能同时做这两件事。

在创建包含文本字符串的 SQL 查询时需要进行 SQL 转义。尽管您最好使用参数化查询(例如 mysqli 或 PDO),以免担心它。

HTML 转义需要在创建包含文本字符串的 HTML 标记时进行。尽管在理想情况下,您会使用默认情况下经过 HTML 转义的模板语言,因此您不必担心这一点。

如果您在输入阶段应用 HTML 转义和 SQL 转义,而不是在各自的输出阶段应用,您将在数据库中获得 HTML 编码的数据,而您将无法对其应用一致的文本处理(搜索、子字符串等),您将得到 SQL 编码的数据,该数据被吐出到页面上,其中该值尚未经历数据库 I/O 周期(O\\\\\\\\'Reilly 问题。此外,您仍然会面临任何未经过输入路径的数据的风​​险 - 例如从数据库中获取字符串,处理它并将其返回到数据库,然后它不会有转义步骤,并且您很容易再次受到 SQL 注入(inject)的攻击。<​​/p>

这两种转义方案都不适合全面应用于输入。输入过滤应该用于阻止您不想处理的字符并强制执行业务规则。仅在将文本内容移动到新上下文中时才进行输出转义 - 并尽可能使用框架来防止您此时必须手动转义。

关于php - 逃避 MySQL 注入(inject)和过滤 XSS 攻击尝试的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11406700/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com