Ultimately, you may have projects that seem almost too good to be true and no idea how to go about proving what your students did on their own. The Internet is a terrific resource, and one that you should be training your students to use well. That being said, submitting an assignment that consists of code that the student didn’t write without proper attribution is definitely unacceptable.
A wonderful way to check for understanding is to host code reviews with students. In this process, you develop a series of questions to ask the students regarding the important features of the project. It can be as simple as asking them to trace through a certain segment of the code, or posing more abstract questions regarding the choices they have made to solve the problem.
Many professional organizations will host formal code reviews with an entire team of developers participating. You may not want to subject your students to this level of scrutiny, but if you have very good projects it may provide an opportunity for you to highlight coding practices that your struggling students have yet to master. Modeling of code is an essential practice in a successful computer science classroom.
For more information, read this excellent blog from the ACM CSTA website: http://cacm.acm.org/blogs/blog-cacm/175944-small-group-code-reviews-for-education/fulltext