阻止html表单字段中的链接

时间:2013-05-16 22:44:39

标签: html forms hyperlink

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

有人能指出正确的信息方向吗? 感谢

<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 个答案:

答案 0 :(得分:3)

在插入数据库之前添加此内容

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
}

答案 1 :(得分: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代码示例。所以不想阻止那个输入,因此每当它被发送回浏览器时,它们都确保转义它,使它完全无害。有关详细信息,请参阅此文章:https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

答案 2 :(得分:0)

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

答案 3 :(得分:-2)

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

如果我想阻止将链接提交到表单中,我可以使用PHP的strip_tags()函数从用户输入的内容中删除所有<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";
  }

从那里开始工作。