【问题标题】:stop HTML/Javascript and SQL injection on website [duplicate]停止网站上的 HTML/Javascript 和 SQL 注入 [重复]
【发布时间】:2012-03-21 18:15:15
【问题描述】:

我拥有一个在线游戏,其中有一个状态框。您可以根据自己的感受对其进行更新。我遇到的问题是用户将 java 脚本标签放入消息和状态中。所以当另一个用户来到他们的页面时,会弹出一个弹出框说哈哈或他们想要的任何东西。

然后我通过使用停止了它

$status = mysql_real_escape_string($_POST['status']);
$foo = preg_replace('/[^a-z]/i', null, $status );

现在已经停止运行任何 JavaScript,但是现在当有人向某人发送消息时,它会删除空格,因此对于消息“你好吗”,它将显示“howareyou”。当然这是安全的,但用户无法阅读消息。有没有其他方法可以阻止脚本标签插入病毒但仍然允许空格?

我也很害怕有人用 XSS 攻击我。因为之前,我被告知用户可以在消息中输入一些内容,然后当其他用户打开它时,它会向他们发送密码.....

【问题讨论】:

标签: php mysql html


【解决方案1】:

首先在所有外部输入上使用mysql_real_escape_string() 可以防止所有SQL 注入 - 根本不需要preg_replace!但这只是为了防止 SQL 注入。

为了防止您的网站出现脚本/HTML 注入,您应该始终使用htmlspecialchars() 转义来自用户输入的所有文本在您将其呈现给您的访问者之前网站。 (例如,紧跟在数据库中的SELECT 之后)

请认真对待:如果你有时间,去谷歌搜索 SQL 注入!它并不复杂,你会很容易理解的。如果您创建网站(无论为谁)并将用户输入存储在数据库中,您会发现有人试图进行 SQL 注入。这很容易做到,并且网络上有自动化软件可以轻松地在数百或数千个网站上自动尝试各种 SQL 注入!而对于客户端来说,如果开发人员根本不阻止 SQL 注入,这绝对是不可接受的,所以请花点时间解决这个问题。

脚本注入也是如此!与 SQL 注入一样,防止这种情况非常容易。您所要做的就是将来自用户输入的所有文本转换为 HTML,这样当一些邪恶的人输入 <script>...</script> 时,您的访问者将直接看到这一点,因为例如 < 被转换为 < 和从而防止脚本被浏览器解释为 javascript。

【讨论】:

  • 我使用 $status = mysql_real_escape_string($_POST['status']);但脚本标签虽然.......
【解决方案2】:
$foo = htmlspecialchars($status);

【讨论】:

  • 对。这不是sql注入,而是XSS。 +1 注意。仅在输出到您的站点时才这样做,而不是在插入数据库时​​这样做
  • 没错,您需要为您要输出到的介质准备数据。
  • 您应该添加一些解释,以便 OP 可以从您的答案中学习。
猜你喜欢
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 2016-06-04
  • 2015-05-17
  • 2016-04-06
相关资源
最近更新 更多