Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
除了PHP中的XSS和SQL注入之外,未初始化的用户输入导致的安全风险?_Php_Sql_Security_Xss_Input Sanitization - Fatal编程技术网

除了PHP中的XSS和SQL注入之外,未初始化的用户输入导致的安全风险?

除了PHP中的XSS和SQL注入之外,未初始化的用户输入导致的安全风险?,php,sql,security,xss,input-sanitization,Php,Sql,Security,Xss,Input Sanitization,XSS和SQL注入是未初始化用户输入的两个主要安全风险 可以通过使用防止XSS(当没有所见即所得时) htmlspecialchars()和SQL注入可以通过使用 参数化查询和绑定变量 通过使用这两种方法,使用所有未初始化的输入是否安全?通过使用这些方法,您的用户输入在很大程度上已经被净化。如果您想更进一步,可以在运行SQL代码之前对输入进行验证检查。例如,检查数字是否仅为数字,检查用户输入的长度等。通过使用这些方法,用户输入的大部分内容已经被清除。如果您想更进一步,可以在运行SQL代码之前对输

XSS和SQL注入是未初始化用户输入的两个主要安全风险

可以通过使用防止XSS(当没有所见即所得时) htmlspecialchars()和SQL注入可以通过使用 参数化查询和绑定变量


通过使用这两种方法,使用所有未初始化的输入是否安全?

通过使用这些方法,您的用户输入在很大程度上已经被净化。如果您想更进一步,可以在运行SQL代码之前对输入进行验证检查。例如,检查数字是否仅为数字,检查用户输入的长度等。

通过使用这些方法,用户输入的大部分内容已经被清除。如果您想更进一步,可以在运行SQL代码之前对输入进行验证检查。例如,检查数字仅为数字,检查用户输入的长度等。

除了XSS和SQL注入之外,还有一些可能的问题:

  • XML外部实体文件通过
    simplexml_load_[file | string]()()公开
  • 通过取消序列化()执行远程代码:
  • 通过
    system()
    popen()等执行命令
  • strcmp()
    使用数组绕过
  • ……等等
它始终取决于用户输入的传递位置以及如何对其进行清理。例如,始终将PDO用于SQL操作,因为即使进行了适当的转义,攻击者也可以在不使用引号的情况下插入SQL代码:

SELECT title, content FROM cms WHERE id = 1
攻击者可以将此更改为:

SELECT title, content FROM cms WHERE id = -1 UNION SELECT username AS title, password AS content from users LIMIT 1
在这种情况下,只有
intval()
有帮助,而转义(mysql\u real\u escape\u string、magic\u引号、addslashes等)根本没有帮助


请看这里:

除了XSS和SQL注入之外,还有一些可能的问题:

  • XML外部实体文件通过
    simplexml_load_[file | string]()()公开
  • 通过取消序列化()执行远程代码:
  • 通过
    system()
    popen()等执行命令
  • strcmp()
    使用数组绕过
  • ……等等
它始终取决于用户输入的传递位置以及如何对其进行清理。例如,始终将PDO用于SQL操作,因为即使进行了适当的转义,攻击者也可以在不使用引号的情况下插入SQL代码:

SELECT title, content FROM cms WHERE id = 1
攻击者可以将此更改为:

SELECT title, content FROM cms WHERE id = -1 UNION SELECT username AS title, password AS content from users LIMIT 1
在这种情况下,只有
intval()
有帮助,而转义(mysql\u real\u escape\u string、magic\u引号、addslashes等)根本没有帮助


也请看一下:

你总是要考虑数据使用的上下文。因为上述功能和技术只有在根据其使用目的使用时才起作用。这不仅适用于HTML和SQL,也适用于任何其他语言/上下文

关于XSS,由于通过HTML字符引用转义HTML特殊字符
&
”和
,因此它仅在您将数据放入时保护您,但在应用其他分隔符(例如,一个或您已经在HTML中输入了另一个上下文)时对您没有帮助(例如,被视为JavaScript代码的HTML属性值,如事件属性上的
;或在不同语言的HTML元素中,如
,或
,其他/附加规则适用)。更不用说所谓的,输入不是由服务器处理的,而是由客户端JavaScript处理的。因此,在某些情况下,
htmlspecialchars
对您没有帮助


但是,对于数据库连接层或数据库管理系统来说,你应该是安全的,正确的数据处理。除非,当然,你是.

你必须考虑数据所使用的上下文。因为上面提到的函数和技术只能根据它们的用途来使用。这不仅适用于HTML和SQL,也适用于任何其他语言/上下文

关于XSS,由于通过HTML字符引用转义HTML特殊字符
&
”和
,因此它仅在您将数据放入时保护您,但在应用其他分隔符(例如,一个或您已经在HTML中输入了另一个上下文)时对您没有帮助(例如,被视为JavaScript代码的HTML属性值,如事件属性上的
;或在不同语言的HTML元素中,如
,或
,其他/附加规则适用)。更不用说所谓的,输入不是由服务器处理的,而是由客户端JavaScript处理的。因此,在某些情况下,
htmlspecialchars
对您没有帮助


但是,关于,您应该出于安全考虑,因为数据库连接层或DBMS将负责正确的数据处理。当然,除非您是。

SQL注入只是更广泛威胁的一种情况。也就是说,任何用户输入(或任何其他不受信任的内容)作为代码运行的情况

这包括了很多其他的向量。来自@thebod的答案包括一个链接到一个很棒的StackOverflow线程:

即使SQL注入也无法通过参数或转义100%解决。这两种技术都只能帮助清理SQL表达式中的单个值。您可能还需要允许用户输入选择表、列、SQL关键字或整个表达式。对于这些,参数和转义没有帮助。例如:

$sql = "SELECT * FROM mytable ORDER BY $sortcolumn $asc_or_desc";
在该示例中,要排序的列名和方向(
ASC
vs.
DESC
)基于变量。变量是从可信输入设置的,还是逐字使用$\u GET参数,导致SQL注入漏洞

对于这些情况,更好的解决方案是允许