3

如果表单包含链接,是否有办法阻止提交表单。我想防止将链接添加到输入:问题和消息字段。

任何人都可以指出正确的信息方向吗?谢谢

<div class="form">
        <form id="sbwd_contact" method="post" action="http://whatanswered.com/forms/ask/ask.php">
            <em class="error"></em>
            <input type='hidden' name='sfm_form_submitted' value='yes'/>
            <label for="Email">E-Mail: </label>
            <input type="text" id="Email" name="Email" size="30" class="required email" />
            <label for="question">Question: </label>
            <input type="text" id="question" name="question" size="30" class="required" />
            <label for="Message">Additional Info: </label>
            <textarea name="Message" cols="30" rows="6" id="Message" class="required"></textarea>
            <br />
            <p><span>I Agree to the Terms and Conditions
                        <input type="checkbox" name="Terms_and_conditions" value="I agree" class="required"/></span></p>
            <input name="Submit" type="submit" id="Submit" value="Send" />
            <br /><br />
            <p><a href="http://whatanswered.com/terms-and-conditions.php" target="_blank">View our Terms and Conditions</a></p>
        </form>
4

4 回答 4

5

在插入数据库之前添加这个

if(preg_match("/\b(?:(?:https?|ftp|http):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$_POST['question'])){

// prevent form from saving code goes here
 echo "<script>alert('Please remove URLs');</script>"; 
}
else{
 // Insertion in Db
}
于 2016-08-29T19:06:28.347 回答
1

为了防止表单被实际提交,您需要使用 JavaScript 来抑制提交事件的冒泡。具体来说,我建议使用 jQuery,如下所示:

$(document).ready($(document).on('submit', function()
 { if ($("#question:contains('href=')").length > 0) return false; });

我可能是错的,但看起来您正在尝试实现某种针对垃圾邮件或跨站点脚本 (XSS) 的简单保护。如果是这样,这可能不是最好的技术,因为就像所有客户端安全一样,它很容易被绕过。更好的是使用正则表达式在服务器端删除此类链接帖子。或者为了防止垃圾邮件,使用适当的贝叶斯/关键字过滤器,例如由许多 WordPress 插件实现的。请记住,垃圾邮件发送者仍然可以在没有超链接的情况下推销他的产品。我想你会发现试图通过停止带有超链接的帖子来防止垃圾邮件对于半流行的博客或对讲部分来说是不够的。各种其他类型的垃圾邮件,例如股市三字母代码的拉高和抛售、品牌丢弃或品牌 FUD,在没有超链接的情况下也可以有效。

还要记住,用户可以通过多种不同的方式将可能有害的 HTML/JS/SQL 代码注入帖子中。最好的技术是加强对用户输入的处理,而不是完全限制输入。例如,在 Stack Overflow 上,用户可以发布 HTML/JS 代码示例。SO不想阻止该输入,因此他们确保在将其发送回浏览器时对其进行转义,使其完全无害。有关更多信息,请参阅本文:https ://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet 。

于 2013-05-16T22:58:08.543 回答
0

当然,您可以检查您的输入字段是否包含一个或多个子字符串,例如“HTTP://”,如果是,则以错误结束脚本。使用http://php.net/manual/en/function.substr-count.php

于 2013-05-16T22:52:16.947 回答
-2

首先,您发布了一个 HTML 脚本,并且您询问的是 PHP,因此您没有表现出任何努力。话说回来..

如果我想阻止将链接提交到表单中,我可以使用strip_tags()PHP 的功能<a >从用户输入的内容中删除所有内容,从而将链接更改为原始文本。或者从 PHP 端,您可以使用filter_var($url, FILTER_VALIDATE_URL)来验证 URL 是否已提交:

 $url = "http://www.mywebsite.com";

if(!filter_var($url, FILTER_VALIDATE_URL)){
  echo "No URL detected";
  }else{
  echo "URL is found";
  }

并从那里开始工作。

于 2013-05-16T22:53:18.723 回答